2011-04-20 78 views
1

這可能很簡單,但我嘗試了幾件事,找不到使其工作的方法。將自定義信息提交給控制器

我想更新與在form_for

給出的自定義信息模型要使它更具體,我的節目頁面上MyClass的特定情況下,我想通過類似的將字符串「yay」輸入到控制器中,然後按照我的輸入進行操作。也許可以將它作爲flash消息傳遞迴頁面,也可以修改內容,然後將其作爲MyClass實例的字段存儲。

我可以編寫form_for包含MyClass的屬性沒有prbolems,但似乎其他字段拋出一個錯誤。

如何編寫form_for以便我可以完成上述兩種情況之一?

def update 
    @my_class = MyClass.find(params[:id]) 
    flash[:notice] = "This works" # but what can I write in a form for for it to be a variable that's passed in? 
    #rest of the update 
    end 

回答

1

統一表單構建器實例(如f.text_field)的表單助手期望有效的模型屬性,以便它可以生成適當的id並使用模型中的數據填充字段。如果你想擁有的表單字段不對應於模型屬性,不使用標準f.text_field而是使用:

<%= text_field_tag 'my_custom_tag' %> 

它應該呈現這樣的:

<input type="text" id="my_custom_tag"></input> 

當表單被提交,輸入的值將顯示在params散列中,其鍵值爲:my_custom_tag。

我希望這會有所幫助。

+0

這樣做的竅門!非常感謝你。 – 2011-04-20 02:30:36

0

看來,你可能需要在你的形式hidden_​​field:

http://apidock.com/rails/ActionView/Helpers/FormHelper/hidden_field

但是,如果你想節省一些樣的狀態,這似乎是這是你想要什麼,你永遠不會使用它。相反,你會使用一個會話。原因是隱藏字段可以被客戶端操縱,因此安全性很容易被覆蓋。

0

就像Spyros說的,一個隱藏的領域會給你這個地方。假設用戶可以修改網址,那麼只需將attr_accessor :foo添加到模型中即可。

在控制器中,您可以使用bar = params[:foo]來訪問它,並按照您的要求進行操作。

相關問題