小编fly*_*llo的帖子

.vs ::(点与双冒号)用于调用方法

可能重复:
Ruby中的含义是什么意思?

我正在从Ruby的Poignant Guide中学习Ruby ,在一些代码示例中,我遇到了似乎用于相同目的的双冒号和点的使用:

File::open( 'idea-' + idea_name + '.txt', 'w' ) do |f|
   f << idea
end
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,双冒号用于访问类的open方法File.但是,后来我遇到了使用点来实现相同目的的代码:

require 'wordlist'
# Print each idea out with the words fixed
Dir['idea-*.txt'].each do |file_name|
   idea = File.read( file_name )
   code_words.each do |real, code| 
     idea.gsub!( code, real )
   end
puts idea
end 
Run Code Online (Sandbox Code Playgroud)

这次,使用点来访问类的read方法File.有什么区别:

File.read()
Run Code Online (Sandbox Code Playgroud)

File::open()
Run Code Online (Sandbox Code Playgroud)

ruby

45
推荐指数
1
解决办法
1万
查看次数

在哪里为控制器添加辅助方法?

我期待编写某些方法来处理字符串,以及在我的许多控制器中发生的其他任务.我知道在你的控制器中加入帮助器是不好的做法,所以我只是想知道,在控制器中使用应用程序范围的方法的最佳位置在哪里?

我意识到有些人会说将它们放入模型中,但你必须意识到并非所有的控制器都有相关的模型.任何和所有输入将不胜感激.

ruby-on-rails ruby-on-rails-3

19
推荐指数
3
解决办法
1万
查看次数

Rails select_tag onchange ajax请求

我正在尝试创建一个表单,在选择某些元素后向表单添加元素.例如,在用户选择国家/地区之后,我希望有一个ajax调用,其中找到与该国家/地区关联的所有区域/州,然后将其插入到表单中的select元素中.然后,一旦用户选择区域/状态,将发生相同的过程,并且将另一个元素添加到表单中以响应所选值.作为旁注,我想以不引人注目的方式做到这一点.到目前为止,我认为这一点:

<%= form_tag(find_school_path, :method=>'get', :class => 'form-horizontal', :id => 'find_by_country_form') do %>

    <%= label_tag :country_selection, "Country" %>
    <%= select_tag :country_selection, options_from_collection_for_select(@countries, :id, :name), :prompt => "Country" %>

<% end %>
Run Code Online (Sandbox Code Playgroud)

然后在该视图的javascript文件中,我在选择国家时处理ajax调用:

$('#country_selection').change(function(){
  $.ajax({
    url: "find/country_selection",
    type: "GET",
    data: {'country=' + $('#country_selection option:selected').value() },
  })
});
Run Code Online (Sandbox Code Playgroud)

然后,在我的控制器里面,我上面的url:路线有:

def country_selection
    @country = Country.find(params[:country])
    @regions = @country.regions

    respond_to do |format|
       format.js {  }
    end
end
Run Code Online (Sandbox Code Playgroud)

最后,在我的country_selection.js.erb文件中,我有:

$('#country_selection').after('<%= label_tag :region_selection, "State/Region" %><%= select_tag :region_selection, options_from_collection_for_select(@regions, :id, :name), :prompt => "State/Region" %>');
Run Code Online (Sandbox Code Playgroud)

我没有得到这个工作.我甚至不确定我是以正确的方式做到这一点.当我点击选择并更改选项时,页面上的任何内容都不会更改. …

ruby-on-rails ruby-on-rails-3

14
推荐指数
1
解决办法
1万
查看次数

为现有控制器创建新操作

我知道这可能是一个新手问题,但是可以从现有控制器上的命令行创建一个新动作(控制器和相关视图中的方法)吗?

例如,我已经有一个名为'Products'的控制器.我可以跑:

rails g controller products [new_action]
Run Code Online (Sandbox Code Playgroud)

然后rails会插入:

def [new_action]

end
Run Code Online (Sandbox Code Playgroud)

进入我的产品控制器并在views/products /目录中创建一个名为'[new_action] .html.erb'的新文件?我已经用谷歌搜索了这个,但没有回复令人满意的答案.此外,我会继续尝试它,但我对我当前的应用程序的开发很远,并且真的不想弄乱任何东西.

ruby-on-rails ruby-on-rails-3

11
推荐指数
1
解决办法
9804
查看次数

Postgresql.app vs Homebrew

我对RoR很新,我希望将我的下一个应用程序部署到heroku.我希望我的开发和测试环境与我的生产环境相匹配,以实现最顺利的过渡.因此,我开始在我的系统上安装postgresql.这个过程令人沮丧,我感到困惑.我跟随无数的教程无济于事,似乎很多人都有相互矛盾的信息.这就是我所知道的:

有很多方法可以安装postgresql.常见的选项是macports,homebrew,fink,Postgresql.app或enterpriseDB.安装上一个之后,您必须创建rails应用程序并运行:

rails new <app_name> -d postgresql
Run Code Online (Sandbox Code Playgroud)

或运行标准'rails new'然后在gemfile中将'sqlite3'更改为'pg'.然后,如果我是正确的,你实际上必须通过这样做在命令行中创建自己的数据库:

$ psql
$ CREATE DATABASE your_database_name;
Run Code Online (Sandbox Code Playgroud)

然后,编辑您的database.yml以遵循以下内容:

development:
  adapter: postgresql
  encoding: unicode
  database: <your_database_name>
  host: localhost
  pool: 5
  username: <username>
  password:
Run Code Online (Sandbox Code Playgroud)

一旦完成,一切都应该好.但是,我遇到了问题.我实际上使用上面的过程工作,但我很困惑它是如何运行的.在尝试使所有这些工作的几个小时内,我安装了macports,homebrew和postgresql.app.但是,每当我尝试与数据库进行交互(例如'rake db:migrate')而没有运行postgresql.app时,我会收到此错误:

could not connect to server: Connection refused
    Is the server running on host "localhost" (::1) and accepting
    TCP/IP connections on port 5432?
could not connect to server: Connection refused
    Is the server running on host "localhost" (127.0.0.1) and accepting
    TCP/IP connections on port 5432?
could not connect to …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails heroku ruby-on-rails-3

9
推荐指数
1
解决办法
4065
查看次数

setTimeout可以太长了吗?

我正在创建一个应用程序,轮询服务器以进行特定更改.我使用setTimeout使用自调用函数.基本上这样的东西:

<script type="text/javascript">
someFunction();

function someFunction() {
  $.getScript('/some_script');
  setTimeout(someFunction, 100000);
}
</script>
Run Code Online (Sandbox Code Playgroud)

为了使这种轮询在服务器上不那么密集,我希望有一个更长的超时间隔; 也许在1分钟到2分钟的范围内.是否存在setTimeout的超时变得太长且不再正常工作的点?

javascript

6
推荐指数
2
解决办法
5065
查看次数

Rails:长轮询实践

我正在开发一个应用程序,允许用户发布到房间/页面,就像一个论坛或这里(stackoverflow).我已经构建了整个应用程序,但是,我有一个最后的障碍:如何处理更新用户的帖子.

我已经对这个主题做了很多研究,我相信Long Polling是要走的路,至少在我获得大量流量之前(如果发生这种情况,我会弄清楚如何实现websockets).这是因为Long Polling将更容易实现,它得到更广泛的支持,并且考虑到我正在部署到heroku,很容易快速升级我的服务器资源.无论如何,我想知道在用户交互和服务器负载方面长轮询的最佳实践是什么.

我应该自动在页面上放置帖子,还是创建一个警报系统,例如stackoverflow上的那个?

任何和所有输入将不胜感激.无论如何你认为我的逻辑错了,请告诉我!

ruby-on-rails heroku long-polling ruby-on-rails-3

5
推荐指数
1
解决办法
1786
查看次数

无法安装 therubyracer

我最近从 github 分叉了一个存储库,但是,当我尝试运行“捆绑安装”时,我得到以下错误输出:

Robert-Quinns-MacBook-Pro:~ robertquinn$ gem install therubyracer

Building native extensions.  This could take a while...
ERROR:  Error installing therubyracer:
    ERROR: Failed to build gem native extension.

        /Users/robertquinn/.rvm/rubies/ruby-1.9.3-p194/bin/ruby extconf.rb
creating Makefile
Compiling v8 for x64
Using python 2.5.4
Unable to find a compiler officially supported by v8.
It is recommended to use GCC v4.4 or higher
Using compiler: g++
Unable to find a compiler officially supported by v8.
It is recommended to use GCC v4.4 or higher
  File "./gyp-mac-tool", line …
Run Code Online (Sandbox Code Playgroud)

ruby gem ruby-on-rails-3

5
推荐指数
1
解决办法
1414
查看次数

twitter-bootstrap-rails未捕获的TypeError/$不是函数

在开发rails应用程序的时候,我在谷歌chrome检查元素控制台测试ajax链接,突然间我注意到12个同类错误:

控制台日志错误

我不知道这里发生了什么,但我的应用程序工作正常,无论如何.但是,当我在firefox中启动我的应用程序时,我的应用程序甚至没有加载.我停下来,弹出这个错误:

调试屏幕显示错误位置

我甚至不知道还有什么要说的,因为我完全被难倒了.

gem jquery ruby-on-rails ruby-on-rails-3 twitter-bootstrap

3
推荐指数
1
解决办法
2327
查看次数

button_to使用GET方法

我正在使用Rails第4版(Rails 3.2+)进行敏捷Web开发,我对button_to方法感到有些困惑.这本书以及我所做的所有其他谷歌搜索都说button_to使用了POST请求.但是,当我检查页面时,button_to似乎正在使用GET方法.

现在,我可能有这个错误,但我来自php背景和POST方法总是意味着数据被传递到服务器而没有url并通过阵列服务器端访问:

$_POST['form_item'] 
Run Code Online (Sandbox Code Playgroud)

此外,GET请求意味着通过URL传递数据:

someurl.com/somepage?DATA=data_value
Run Code Online (Sandbox Code Playgroud)

使用此button_to代码:

  <%= button_to 'Add to Cart', line_items_path(product_id: product_id) %>
Run Code Online (Sandbox Code Playgroud)

这将成为表单输出:

<form action="/line_items?product_id=4" class="button_to" method="post">
<div>
<input type="submit" value="Add to Cart" />
<input name="authenticity_token" type="hidden" value="vGT1scGqasbQAMxYwofXHCM62MfSyM/pNty69Ep5t38=" />
</div>
</form>
Run Code Online (Sandbox Code Playgroud)

此表单上的操作似乎是通过URL传递数据(?product_id = 4).虽然我可以清楚地看到"method ='post'",但这不是一个使用GET吗?

ruby-on-rails ruby-on-rails-3

2
推荐指数
1
解决办法
3334
查看次数

else语句被忽略了

在我看来,我正在测试是否存在某些记录.如果他们这样做,我会迭代它们并显示每一个.但是,如果这些记录不存在,我想要显示一条消息.这是我的观点中的代码:

      <% if current_user.lineups %>
        <% for lineup in current_user.lineups do %>
          <li><%= link_to "#{lineup.course.cl} #{lineup.course.cn}", index_path %></li>
        <% end %>
      <% else %>
        <li><%= link_to "You have no courses", index_path %></li>
      <% end %>
Run Code Online (Sandbox Code Playgroud)

现在,当记录存在时,迭代工作正常.每当我创建正确的记录时,此代码都会非常有效,并为每个迭代的记录创建一个链接.但是,如果不存在任何记录,则不显示任何内容.'else'语句完全被忽略.我试图修改'如果'的标签,但无济于事.我试过了:

<% unless current_user.lineups.nil? %>
Run Code Online (Sandbox Code Playgroud)

以及:

<% if !( current_user.lineups.nil? ) %>
Run Code Online (Sandbox Code Playgroud)

我在这里结束了我的智慧.任何和所有输入将不胜感激.

ruby-on-rails ruby-on-rails-3

2
推荐指数
1
解决办法
125
查看次数

将两个实例变量传递给js.erb文件?

我需要将两个实例变量传递给ajax请求用来更新用户显示的javascript文件.这就是我需要做的事情:

respond_to do |format|
    if @post.save
        format.js { @post @user_vote }  # <-- right here
    else 
        format.html { redirect_to :back, :alert => 'There was an error in removing the vote' }
    end
end 
Run Code Online (Sandbox Code Playgroud)

这是怎么做到的?

ruby-on-rails ruby-on-rails-3

2
推荐指数
1
解决办法
3632
查看次数

before_save&before_create标题化麻烦

我正在开发一个rails应用程序,我试图在保存或创建属性之前对其进行标题化.我很确定我已经正确地完成了这个,但是,每当我尝试在我的rails控制台中创建一个新记录时,标题化都没有发生.这是我的型号代码:

class City < ActiveRecord::Base
  attr_accessible :name, :region_id

  belongs_to :region

  before_save :tileize_name
  before_create :tileize_name


  def tileize_name
    self.name.titleize
  end

end
Run Code Online (Sandbox Code Playgroud)

当我在控制台中读取属性时,标题化方法有效.例如:

Region.find(4).name
 => "arizona" 


Region.find(4).name.titleize
 => "Arizona" 
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么吗?

ruby-on-rails ruby-on-rails-3

1
推荐指数
1
解决办法
1518
查看次数