2013-03-26 72 views
3

我有一些show動作顯示一個類別。但從那裏我想通過鏈接創建新產品。要點是我通過link_to傳遞了類別id和名稱。從show動作傳遞id參數到通過link_to的新動作,rails

它很好,它打開產品/新行動。並且在瀏覽欄中有像這樣的鏈接http://mysite/products/new?id=43&name=Skeleji。好的。

但是我怎樣才能使這些id和名稱在窗體中可用,我在哪裏填寫有關新產品的信息? 在此之後,當我點擊創建,我希望這樣的category_id值與其他信息abaut產品一起保存在db中。

之間,產品和類別我建立了關係。

到目前爲止,我的代碼看起來像這樣。

我的類別/ show action code看起來像這樣。

<%= link_to "Add Product", {:controller => "products", :action => "new", :id => @category.id, :name => @category.name }%> 

產品控制器,新動作看起來像這樣。

def new 
@product = Product.new 
@product.category_id = @category.id 
end 

點擊創建項目,但沒有category_id。問題在哪裏? 也許代碼是什麼在新的行動下,實際上應該在創建行動之下。大約一年以前,我設法做這樣的事情,但我無法找到該項目:(

+0

哇,我發現它我自己:D我不得不使用'@ productctl_id = params [:id]'而不是'@ product.category_id = @ category.id' – Edgars 2013-03-26 13:38:03

回答

5

你應該能夠只是設置的值在new行動:

def new 
    @product = Product.new 
    @product.category_id = params[:id] 
    @product.name = params[:name] 
end 

然後,他們將出現這樣在你的形式。

但我不認爲這是一個好主意,在ProductsController打電話給你的參數id因爲它是足智多謀的路由默認的參數名稱。params[:id]通常應該始終指Product對象。由於它發生,你在中使用它正常使用中的動作永遠不會收到id參數,所以我懷疑你會遇到任何麻煩,但它不是很有語義。

如果讓Product接受Category嵌套屬性的話,我想你可以簡單地做:

@product = Product.new(params[:product]) 

如果您的結構像PARAMS::product => { :name => "whatever", :category_attributes => { :id => 1 } }但可能是矯枉過正根據您的需要。

+0

爲什麼它不是個好主意? :) – Edgars 2013-03-26 13:44:31

+0

更新了答案。 – 2013-03-26 14:02:01

2

你試過@product.category_id = params[:id]

通常任何在URL中的?包含與params變量。

相關問題