我不知道如何返回选中的值。有我的代码
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
答案 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]的东西?如果是的话,那里有什么?