2014-02-06 85 views
2

這裏的相對新手到Ruby on Rails。影響從form_for設置結果參數

使用在視圖中的標準form_for方法爲我SomeobjController#new動作

= form_for @someobj do |f| 
    . 
    . 
    . 
    %p.submits 
    = f.submit "Submit", :class => "submit" 

提交param[]陣列產生一個包含@someobj在形式設置的所有字段的散列,使得

param[someobj] => { "field1" => "val1", "field2" => "val2", ... } 

我寧願把一個不同的值,結果someobj.to_sparam[someobj]SomeobjController#create來處理,使得

param[someobj] => "strvalfromtos" 

我懷疑它的相對的,但只是在情況下,模型底層這#new動作不是在數據庫持久(即,Someobj不從ActiveRecord::Base衍生,雖然被包括加載ActiveModel的一些部分。)

我還沒有試圖調整它,直到#create被調用之後,但它從#new到#create的提交,我想要修改。我不清楚,如果我應該更關注form_for聲明或在控制器中做一些特殊的事情(我猜form_for是正確的重點)。

而且,是的,這整個事情可能是我的強迫症,但實際的字段名很長(適合模型),但#create所需的數據非常小。

假設someobj.to_s已被寫入,是否有相對無痛的方式來做到這一點?

非常感謝, 理查德

+0

您使用的是Rails 4嗎? – Beartech

+0

你的問題還不清楚。你說你想要改變params散列的值? params散列的目的是從你的表單傳入數據。你是說你想要獲取表單數據,把它變成某種字符串,然後提交? – Beartech

+0

對不起,Rails 3.2.16。是的,我想我是這麼說的,但是你的問題有助於爲我澄清它。我一直認爲它更像另一個參數,但考慮到情況似乎仍然合適。 – rdnewman

回答

0

變化

當您提交表單,您的控制器將獲得params哈希表,因爲你已經說(Rails params explained?

這意味着你可以改變你希望的散列值:

def create 
    #has access to the params hash 
    params[:owner][:key] = value 
end 

由於create方法接收到散列對象,因此您必須在此更改它。但是,因爲它是一個標準的哈希(已被宣佈),你應該能夠改變它需要

添加

如果你想將值添加到params哈希表,您可以使用.merge方法,如下所示:

def create 
    #has access to the params hash 
    params[:key].merge(user_id: current_user.id) 
end 
+0

謝謝。我意識到我可以在'create'動作中影響它,但是想知道在創建''之前,是否可以影響它。在Beartech的評論中(在我的OP下),他明確表示,我真正想要做的就是彙總表單數據,然後將其作爲單個字符串提交。你關於融入params散列的觀點特別有趣。 – rdnewman

+1

我不會嘗試在表單提交後立即更改參數散列(違背約定)。我會在你的控制器中使用'before_action:'方法,只有:: create'回調函數,這將允許你按照你的意願修改傳遞的參數(在調用'create'方法之前) –

+1

這很有意義。謝謝!我也意識到,我也可以通過放棄form_for來簡化參數,只需使用form_tag和相關標籤來替換字段名稱,然後在'create'中創建最終對象。謝謝你的幫助。 – rdnewman