rails,在设置新对象时传递参数

时间:2010-10-03 11:22:24

标签: ruby-on-rails ruby

在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?

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哈希中,用于初始化新对象。