2011-11-24 79 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