2016-08-21 140 views
0

Rails ver。 5.0.0.1如何通過link_to傳遞參數到

我想通過組合SHOW頁面中的link_to創建並分配一個新屬性。該鏈接應該傳遞portfolio_id作爲參數,並在完成剩餘的財產形式後保存。

我見過這個問題多次提問,但由於某種原因,在我自己的應用程序中應用正確的答案是行不通的。任何幫助將不勝感激,謝謝!

# portfolio show.html.erb 

<%= link_to 'Add New Property To This Portfolio', new_property_path(:portfolio_id => @portfolio.id) %> 

# properties controller 

def new 
@portfolio = :portfolio 
@property = Property.new(params[:portfolio_id => @portfolio]) 
end 

# portfolio model 

has_many :properties 

# property model 

belongs_to :portfolio 
accepts_nested_attributes_for :portfolio 

回答

0

你傳遞的參數很好,但你沒有正確讀取它們。您當前的代碼:

def new 
    @portfolio = :portfolio 
    @property = Property.new(params[:portfolio_id => @portfolio]) 
end 

應改爲:

def new 

    # Rails stores params passed through a link_to in the params 
    # hash, like any other parameter 

    @portfolio = params[:portfolio] 
    @property = Property.new(params[:portfolio_id => @portfolio]) 
end 

還有一些其他的問題,你的代碼,你可能想要解決:

1)你有一個字段叫@portfolio,但它包含一個id。通常,像這樣的普通名稱將存儲Portfolio對象的實例。當一個字段存儲一個id時,附加_id到最後。它有助於人們理解該領域的內容,並對數據類型給出了一個很好的猜測(對Ruby等腳本語言非常重要);

2)您確定要讓您的link_to轉至new方法嗎?當某人使用另一條路徑到達new(如在瀏覽器中輸入URL)時會發生什麼,而不設置portfolio_id?你的代碼不會中斷嗎?

3)你確定你可以創建一個Property對象只有一個portfolio_id?通常情況下,您將通過property_params新方法創建一個新的Property

這些東西都是你應該在不同的問題中解決的所有事情,一旦你想了一會兒,但現在應該通過link_to來傳遞參數。

0

我覺得你需要接受nested_attributesproperty模型portfolio模型。然後,從投資組合的展示頁面,您可以使用link_to_add方法爲特定的portfolio添加property

投資組合模型

has_many :properties 
accepts_nested_attributes_for :properties, :allow_destroy => true,, reject_if: :all_blank 

地產模式

belongs_to :portfolio 

PortfoliosController。RB

##Build in new method: 

def new 
    @portfolio_object = Portfolio.new 
    @portfolio_object.properties.build 
end 

在私有方法接受嵌套屬性

private 

def portfolio_params  
    params.require(:portfolio).permit(:list_of_portfolio_parameters, properties_attributes: [ :list_of_properties_parameters, :_destroy ]) 
end 

然後建立在你的Portfolionew方法的html頁面property屬性。希望它能幫助你。