我是一个轨道新手,有一个简单的问题: 我有两个表,勇气,属于在变量表使用外键
在单个变量的页面中的对象,我把下面的链接:
<%= link_to 'Novo Valor', :controller => "valors", :action=> 'new', :id=>@variable%>
所以URL显示为:http://localhost:3000/valors/new?id=1
但我怎么利用价值的URL,以创造与外键variable_id = 1一个新的勇气对象表示的ID?
我是一个轨道新手,有一个简单的问题: 我有两个表,勇气,属于在变量表使用外键
在单个变量的页面中的对象,我把下面的链接:
<%= link_to 'Novo Valor', :controller => "valors", :action=> 'new', :id=>@variable%>
所以URL显示为:http://localhost:3000/valors/new?id=1
但我怎么利用价值的URL,以创造与外键variable_id = 1一个新的勇气对象表示的ID?
喜欢的东西:
# 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 }) %>
正如numbers1311407说,存储ID或控制器中的实例变量@variable = params[:id]
或@variable = whatever.you.like
中的整个对象。然后你就可以访问这个变量随时:
valor = Valor.new
valor.variable = @variable
valor.save
额外的东西:你可以使用是inflections.rb处理(勇士 - > VALORES),而不是(勇士 - > valors)
变形的建议是相当不错的。 – ANeves
没不工作,我需要的是一种方法来访问新的valor页面上的variable_id,但是当我在新的valor页面中调用@variable或类似的函数时,它返回nil值 –
您将'@ variable'传递到新页面作为'id',将它作为'params [:id]'在新的操作中使用。我只是用它来构建新的“Valor”对象。如果你想在新动作中将它作为'@ variable'存储,'@variable = params [:id]'会做到这一点。 – numbers1311407
感谢params [:id]引用,这足以获得新的勇气页上的变量id,但我仍然无法创建一个新的对象与该引用,我不明白为什么 –