我是铁杆新手,有一个简单的问题: 我有两个表,valor,属于变量表中的对象
在单个变量的页面上,我输入以下链接:
<%= link_to 'Novo Valor', :controller => "valors", :action=> 'new', :id=>@variable%>
因此,网址显示为:http://localhost:3000/valors/new?id=1
但是如何使用URL中表示的id值来创建一个新的valor对象,其外键为variable_id = 1?
答案 0 :(得分:1)
类似的东西:
# Your action
def new
@valor = Valor.new(:variable_id => params[:id])
end
# Then in the view:
<%= form_for(@valor) do |f| %>
...
<% end %>
您还可以通过以create
和update
工作方式传递完整对象参数来简化操作并使其更灵活,例如:
def new
@valor = Valor.new(params[:valor] || {})
end
# making your link:
<%= link_to 'Novo Valor', :controller => "valors", :action=> 'new', :valor => { :variable_id => @variable } %>
这会使生成的URL有点丑陋,但允许您将任意创建参数传递给新记录,而不是在控制器中手动构建它们。
旁注,鉴于您正在使用标准的资源丰富路由,您可以通过使用新Valor
的命名路由来简化链接生成:
<%= link_to 'Novo valor', new_valor_path(:valor => { :variable_id => @variable }) %>
答案 1 :(得分:1)
如number1311407所述,将id或整个对象存储在控制器中的实例变量@variable = params[:id]
或@variable = whatever.you.like
中。然后您可以随时访问此变量:
valor = Valor.new
valor.variable = @variable
valor.save
额外的东西:你可以使用Inflections.rb来处理(valor - &gt; valores)而不是(valor - &gt; valors)