在窗体Rails中传递带复选框的参数

时间:2014-01-26 03:31:42

标签: ruby-on-rails forms checkbox

所以我正在努力。我想要一个复选框,将Time.now发送到我的数据库下的特色列。

我知道如何使用check_box_tag传递params,这似乎如下所示:

  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"}

但是我怎样才能从WITHIN文章中传递出来?表格似乎不喜欢check_box_tag,那你怎么做呢?

这是我的表格:

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

2 个答案:

答案 0 :(得分: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'更改为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', ''

这不太容易受到任何形式的黑客攻击。这可能无关紧要,只是一种很好的做法。

答案 1 :(得分:0)

我终于能够通过以下方式做到这一点

<%= f.check_box :featured, {}, Time.now %>