我正在使用表单,控制器中表单的名称显示为“#”,但我希望它显示为:edge。
这是我的控制器:
def new
#some_stuff
@edge = Edge.new
#some_stuff
end
def create
@edge = Edge.new(edge_params)
@edge.save
end
def edge_params
params.require(:edge).permit(:location_1_id, :location_2_id)
end
查看:
<%= form_for( :edge, :url => {:action => 'create'}) do |f| %>
<ul>
<li>
<%= f.label :location_1_id %>
<%= collection_select(@edge, :location_1_id, @location, :id, :record_as_string) %>
</li>
<%= submit_tag(t(:create_edge)) %>
</ul>
<% end %>
Param req:
{“utf8”=&gt;“✓”,“authenticity_token”=&gt;“blah”, “#”=&gt; {“location_1_id”=&gt;“91”,“location_2_id”=&gt;“92”}, “commit”=&gt;“创建边缘”,“动作”=&gt;“创建”, “controller”=&gt;“admin / edges”,“floor_map_floor_id”=&gt;“1”}
所以参数的名称应该是:edge但它是我无法访问的对象。
有谁能告诉我我错过了什么? 任何帮助表示赞赏。
答案 0 :(得分:1)
您应该使用收藏集上的表单块
<%= f.collection_select(:location_1_id, @location, :id, :record_as_string) %>
(注意你在块变量f
上调用collection_select,而不是将@edge作为第一个参数传递)。
此外,因为您要在新的(@edge = Edge.new
)中创建对象,所以您应该在表单中使用,就像这样
<%= form_for( @edge, :url => {:action => 'create'}) do |f| %>
(虽然使用:edge
并不是导致问题的原因,但我怀疑是因为您在同一表单中使用:edge
和@edge
。您需要保持一致,使用一个或另一个)