在rails中,是否可以在创建新对象时传递参数,并相应地设置一些值?
例如,如果我有一个包含项目列表的屏幕,以及一个在顶部创建新项目的链接。如果我在“新”链接旁边放置一个“项目类型”的下拉列表,我该如何将该值传递给项目控制器上的新函数并将其设置为@ item.item_type?
在JC下面的回复后编辑
如果在控制器中我有以下内容:
@entry = Entry.new
if (params[:type])
@entry.entry_type = params[:type]
end
创建新对象的链接是
<%= link_to "Make new article", {:controller => '/dashboard/entries', :action => :new}, :type => 1 %>
那么new.html.erb表单中的entry_type字段是否应该设置为1?
答案 0 :(得分:3)
您所描述的只是控制器的new
操作的标准表单,以及用于接收表单数据和创建对象的相应create
操作。您可以生成脚手架文件以查看其工作原理的示例,但简而言之,就像这样(假设RESTful设计):
# new.html.erb
<% form_for @item || Item.new do |f| %>
<%= f.select :type, { 'type1' => 1, 'type2' => 2 } %>
<%= f.submit %>
<% end %>
# ItemsController#create
@item = Item.new(params[:item])
if @item.save
redirect_to @item
else
render :new
end
表单中的数据位于控制器的params
哈希中,用于初始化新对象。