2011-11-24 76 views
0

我是一个轨道新手,有一个简单的问题: 我有两个表,勇气,属于在变量表使用外键

在单个变量的页面中的对象,我把下面的链接:

<%= link_to 'Novo Valor', :controller => "valors", :action=> 'new', :id=>@variable%> 

所以URL显示为:http://localhost:3000/valors/new?id=1

但我怎么利用价值的URL,以创造与外键variable_id = 1一个新的勇气对象表示的ID?

回答

1

喜欢的东西:

# Your action 
def new 
    @valor = Valor.new(:variable_id => params[:id]) 
end 

# Then in the view: 
<%= form_for(@valor) do |f| %> 
    ... 
<% end %> 

你也可以简化操作,使之更加灵活的通过传递完整的对象参数以同样的方式createupdate作品,如:

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 }) %> 
+0

没不工作,我需要的是一种方法来访问新的valor页面上的variable_id,但是当我在新的valor页面中调用@variable或类似的函数时,它返回nil值 –

+0

您将'@ variable'传递到新页面作为'id',将它作为'params [:id]'在新的操作中使用。我只是用它来构建新的“Valor”对象。如果你想在新动作中将它作为'@ variable'存储,'@variable = params [:id]'会做到这一点。 – numbers1311407

+0

感谢params [:id]引用,这足以获得新的勇气页上的变量id,但我仍然无法创建一个新的对象与该引用,我不明白为什么 –

1

正如numbers1311407说,存储ID或控制器中的实例变量@variable = params[:id]@variable = whatever.you.like中的整个对象。然后你就可以访问这个变量随时:

valor = Valor.new 
valor.variable = @variable 
valor.save 

额外的东西:你可以使用是inflections.rb处理(勇士 - > VALORES),而不是(勇士 - > valors)

+0

变形的建议是相当不错的。 – ANeves