2012-10-16 26 views
0

我有一個變量,我想在rails中傳遞一個表單。在Rails中傳遞沒有模型關聯的變量

該變量不方便,因爲它不是模型的一部分。我真的不想在數據庫中創建一列,所以我可以傳遞變量。

當我嘗試使用一些無關痛癢的像傳遞變量:

<input type="hidden" id="blah" value=<%= "#{@blah}" %> /> 

隱藏字段變成了正確的來源,但不與params哈希表通過。當我使用id="review_blah"這樣的代碼正確編碼時,rails認爲它是審查模型的一部分,並且因爲它不是模型的一部分而生氣。

是不是有一些解決方法?在這種情況下可以輕鬆傳遞變量的一些方法,而無需重建模型?

感謝

+0

你有沒有試過params [:blah]? – az7ar

回答

2

您需要爲虛擬屬性定義attribute_accessor,並且您需要將其添加到attr_accessible列表中,以便它可以在窗體中使用。就像這樣:

attr_accessor :blah 

這使得blahblah=可用的方法,你可以用它來處理輸入數據。

def blah=(data) 
    #do sth. with the submited data here 
end 

在這種情況下,您可以訪問在「blah」字段中輸入的數據作爲局部變量「data」。

然後,你需要使它的常規形式的一部分:

<%= f.hidden_field :blah, :value => <Your value here> %> 

所以,你需要做的是將現場的attr_accessible列表中的最後一件事。

attr_accessible :blah,.... 

否則,由於質量分配保護,請求會失敗。

2

在模型

attr_accessible :blah 
0

雖然這是非常醜陋的,你可以做這樣的事情在你的控制下

<input name='x' type="hidden" id="blah" value=<%= "#{@blah}" %> /> 

@model.save 
    Model.update_all({:my_attribute => params['x']}, {:id => @model.id}) 
0

您需要設置我認爲輸入參數的名稱。否則它將不會被包含在Rails params hash中。

<input type="hidden" id="blah" value=<%= "#{@blah}" %> name="blah"/> 
0
class ModelName 
    attr_accessor :blah 
end 

@model = ModelName.new 
@model.blah = "blah blah" 
@model.blah #will return "blah blah" 

你不需要在你的表中有一列。檢查here 這種方式,您可以有

=form_for @model do |f| 
    =f.hidden_field :blah 

這將通過blah沿params哈希的對象。