2014-02-14 33 views
1

我想提交一些不屬於該模型對象的額外參數。這裏是我的代碼示例form_for提交一些不屬於該對象的額外參數?

= form_for Comment.new, :url => notes_path({:pined_feed_item => ""}), :html => {class: 'form clearfix', id: 'add_post_form'}, remote: true do |form| 
    .control-group 
     = form.text_area :text, :placeholder => 'Post to the community', :cols => nil, :rows => nil, :class => 'mention expand-without-submit' 
     = check_box_tag :pined_feed_item 
     pinged post 
    = submit_tag "Post your message", class: 'btn btn-success btn-mini' 

我想在控制器級別獲得check_box價值,但是當我檢查有它給我空字符串

+0

問題的實際問題是這樣的,我得到的空值是因爲上述:url => notes_path({:pined_feed_item =>「」})。複選框值永遠不會傳遞給服務器。我怎樣才能將這個價值提供給服務器。我有一種感覺,表單忽略它,因爲它不是模型的一部分 – mfq

回答

0

你如何訪問您的額外參數?

它應該是params[:pined_feed_item]

如果您想用params[:comment][:pined_feed_item]訪問它們,那麼您需要將您的視圖更改爲check_box_tag 'comment[pined_feed_item]'

+0

params [:pined_feed_item]是可訪問的,但它根據複選框綁定它的值。這裏是我的params.inspect {「comment」=> {「text」=>「」「},」pined_feed_item「=>」「,」action「=>」create「,」controller「=>」notes「}} – mfq

1

它給你一個空的字符串,因爲你沒有爲它設置任何值。嘗試使用它在API中描述的方式。第二個參數(pined)是複選框的值,第三個參數是複選框的狀態(如果要檢查或不選中)。例如:

... 
check_box_tag 'pined_feed_item', 'pined', true 
# => <input checked="checked" id="pined_feed_item" name="pined_feed_item" type="checkbox" value="pined" /> 
... 

在這種情況下,參數數組中的控制器將是這樣的:

# params.inspect 
"...{:pined_feed_item=>"pined"}..." 

所以,你可以做你的控制器檢查基於這個條件

if params[:pined_feed_item] == 'pined' 
... 
end 
+0

你的權利關於API的東西,但這不是問題實際問題是這樣的,我得到的空值是因爲上述:url => notes_path({:pined_feed_item =>「」})。複選框值永遠不會傳遞給服務器。我如何向服務器提供它的價值?我有一種感覺,表單忽略了它,因爲它不是Model – mfq

+0

的一部分我的不好。它必須是你正在使用的'url'。你爲什麼這樣做?您傳遞兩次相同的變量(一個來自表單內,另一個來自URL),因此可能會有衝突。 –

+0

它沒有衝突,如果我刪除了上述選項,那麼我的params.inspect看起來像這樣 {「comment」=> {「text」=>「」},「action」=>「create」,「controller」 =>「筆記」} – mfq

1

url中刪除{:pined_feed_item => ""}。這將覆蓋複選框pined_feed_item的值。

當您選中該框並提交表單時,您將看到pined_feed_item"=>"1",如果未選中並提交,則此參數將不會是params散列的一部分。 希望,這有助於。