Rails,复选框

时间:2010-12-08 13:28:54

标签: ruby-on-rails checkbox

我不知道如何返回选中的值。有我的代码

controller:

  def index

    // there I would like to get checked cities

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @cities }
    end

  end


viewer:

  <%= render 'form' %>


_form:

  <% for cities in Database.find(:all) %>
  <div>
    <%= check_box_tag cities.city1 %>
    <%= cities.city1 %>
  </div>
  <% end %>

修改

我试过了:

@cities = Database.find(:all)
params[:cities].each do |city|
  ...
end

<% for city in @cities %>
<%= check_box_tag "cities[]", city.id %> <%= city.city1 %>
<% end %>

但得到了错误:

You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.each

3 个答案:

答案 0 :(得分:5)

您好您的问题似乎与HABTM类似,通过复选框尝试

<%form_tag "some_action", :method => :post do %>
  <% Database.find(:all).each do |city| %>
    <div>
      <%= check_box_tag "cities[]",city.city1, :false %>
      <%= citiy.city1 %>
    </div>
  <% end %>
<%end%>

和内部控制器

def some_action
  if !request.post?
    @cities = Database.find(:all)
    render 'view'
  else
    params[:cities].each do |city|
      ...
    end
    redirect_to view_path
  end
end

答案 1 :(得分:2)

要执行此操作,您需要遍历城市列表,并为每个城市添加名为“cities []”的check_box_tag。

我通常将列表作为要在视图中使用的变量提供。在控制器中执行Database.find。

<% for city in @cities %>
  <%= check_box_tag "cities[]", city.id %> <%= city.name %>
<% end %>

注意 - 如果没有选中复选框,则不会为参数提交任何内容 - 也就是说,根本不会有'cities []'参数。您可能需要根据搜索逻辑添加此项。如果是这样,请添加到表单...

<%= hidden-field_tag "cities[]", '' %>

或者您可以在控制器中处理它。

答案 2 :(得分:1)

将调试器放入控制器代码中。检查你的params会发生什么?是否有类似于params [:cities]的东西?如果是的话,那里有什么?