2014-01-26 70 views
0

所以我在這個上打了我的頭。我想有一個複選框,將Time.now發送到我的數據庫下的特色列。在窗體中傳遞帶複選框的參數Rails

我知道如何通過使用PARAMS和check_box_tag似乎傳遞,如下所示:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"24aw2xi68XsgMrU28is3wcXkNdhLlgVHhZBuJdd9984=", "article"=>{"body"=>"oops", "published"=>"0", "headline"=>"headlinez", "input_slug"=>"weee", "article_position"=>"5", "issue_id"=>"1", "section_id"=>"1", "author_id"=>"", "flag"=>"0"}, "commit"=>"Save Article", "featured"=>"2014-01-25 19:28:57 -0800", "id"=>"weee"} 

但是我怎樣讓這個從內部文章通過? check_box_tag似乎不被表單所喜歡,那麼你怎麼做呢?

這裏是我的形式:

<div class="field"> 
     <label>Featured Article?</label> 
     <%= check_box_tag :featured, @time %> 
     </div> 

回答

1

要移動的參數是文章的散列中,您可以命名check_box_tag像這樣

<%= check_box_tag 'article[featured]', @time %> 

編輯 - 因爲添加更多的這個答案你正在使用form_for

你可以做這種事情,因爲你有一個@article和一個'精選'的方法...

<%= f.check_box :featured, {}, Time.now %> # As you wrote in your answer 

但是,你也可以做到這一點,這是多一點的Rails標準...

更改「特色」被featured_at(這是表示日期時間的更標準的方式),並添加文章中的「特色」attr_access。

class Article < ActiveRecord::Base 

attr_accessor :featured 

def featured 
    !!featured_at 
end 

def featured=(value) 
    if featured_at.present? && value.blank? 
    self.featured_at = nil 
    elsif featured_at.blank? && value.present? 
    self.featured_at = Time.now 
    end 
end 

然後,你可以通過表單提交一個布爾爲featured,而不是日期時間。

= f.check_box :featured, {}, 'true', '' 

這不太容易受到任何形式的黑客攻擊。這可能不重要,只是一個好的做法。

+0

啊,我明白了,我試圖類似於許多不同的方式,但是這就是我需要感謝的語法! –

0

我終於能夠做到這一點通過以下方式

<%= f.check_box :featured, {}, Time.now %> 
相關問題