使用外键

时间:2011-11-24 17:07:07

标签: ruby-on-rails ruby

我是铁杆新手,有一个简单的问题: 我有两个表,valor,属于变量表中的对象

在单个变量的页面上,我输入以下链接:

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

因此,网址显示为:http://localhost:3000/valors/new?id=1

但是如何使用URL中表示的id值来创建一个新的valor对象,其外键为variable_id = 1?

2 个答案:

答案 0 :(得分: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 }) %>

答案 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)