从Rails选择表单获取用户输入

时间:2011-01-31 22:25:17

标签: ruby-on-rails erb

这与previous question有关,但我认为最好将其拆分以便以后进行搜索。

我有一个模特:

class FooModel < ActiveRecord::Base
  MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep']
end

我有一个观点:

<% form_for @foo, :url => {:action => 'bar'} do |f|%>
  <%= select :range, :thing, FooModel::MONTHS%>
  <%= f.submit "Submit" %>
<% end %>

我有一个控制器:

def index
  @foo = FooModel.new
   respond_to do |format|
      format.html # index.html.erb
   end
end

def bar
    @events = params.inspect

  respond_to do |format|
    format.html # index.html.erb
  end
end

我试图通过下拉菜单以多种不同方式访问应该传递的值,但似乎没有通过。甚至调用params.inspect只会将@events设置为等于空哈希。我怀疑我的流程或被称为错误的方式或我称之为错误的时期。

目前索引是^^生活的视图,当你点击提交它时调用吧。我是否需要以不同的方式传递变量?感谢。

更新 也许这是一个领先优势。我相信我对模型和控件中发生的事情有所了解,但有些事情仍然让我对视图产生了疑问。在&lt;%= select:range,:thing,FooModel :: MONTHS%&gt;范围和事物实际上指的是什么?当我阅读教程和其他在线时尽可能地告诉他们用值填写html id和名称标签,但我不知道其他的。我需要在任何地方初始化它们吗?他们特别指的是什么吗?

3 个答案:

答案 0 :(得分:2)

我试过这个。我也试图做常量方法。只有在我将:month更改为我FooModel

中设置的数据库中的列名称后才有效

在我完成这项工作后,我想将其从constants.rb文件移出并将其放入模型中。道格是正确的,并说我们可以通过FooModel::Months

访问它

所以我的最终代码在这个实验中看起来像这样;

型号:

class FooModel < ActiveRecord::Base
  MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep']
end

查看:

<% form_for @foo, :url => {:action => 'bar'} do |f|%>
  <%= f.select :month, options_for_select(FooModel::MONTHS)  %>
  <%= f.submit "Submit", :disable_with => "Submitting..." %>
<% end %>

控制器:

def index
  @foo = FooModel.new
   respond_to do |format|
      format.html # index.html.erb
   end
end

def bar
    @events = params.inspect

  respond_to do |format|
    format.html # index.html.erb
  end
end

在某些时候,我可以看到使用constant.rb来处理月,国家等常见事物,但对于这个有限的实验,我想要两种方式进行测试。如果我使用constants.rb,我的视图将如下所示。

查看是否使用constants.rb;

<% form_for @foo, :url => {:action => 'bar'} do |f|%>
  <%= f.select :month, options_for_select(MONTHS)  %>
  <%= f.submit "Submit", :disable_with => "Submitting..." %>
<% end %>

@hector:希望这有帮助。

答案 1 :(得分:1)

最好为此使用常量。

  1. lib/initializers中创建一个名为constants.rb的文件或任何您想要的文件
  2. 然后为您添加常量MONTHS *请参阅下面的代码
  3. 然后您可以以
  4. 的形式访问该常量

    config/initializers/constants.rb

    MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep']
    

    在您看来:

    <% form_for @foo, :url => {:action => 'bar'} do |f|%>
      <%= f.select :month, options_for_select(MONTHS)  %>
      <%= f.submit "Submit", :disable_with => "Submitting..." %>
    <% end %>
    

    options_for_select只是为选择输入格式化。

答案 2 :(得分:-1)

不幸的是,虽然我喜欢Sam的答案,但它确实对我的代码做了一些改进,但最终还不是我的问题的答案。令人沮丧的答案是,在我看来,我有一个调试行,我正在使用它来查看控件运行后我得到的输出,我从错误的变量打印。简单的复制/粘贴监督。