我需要为评论表单创建一个检查表,用户可以在其上通知评论。
我有一个评论模型,我有一个名为comment_meta的列,我希望将其存储为序列化哈希。
我的评论表单有一个fields_for comment_meta示例;
<%= f.fields_for :comment_meta do |comment_form| %>
<%= comment_form.check_box(contact.id) %>
<% end %>
传递的参数是"comment_meta"=>{"155"=>"0", "156"=>"1", "157"=>"0"}},
但我的数据库正在保存一个空哈希。
comment_meta的字段类型是文本。
有没有办法保存?
答案 0 :(得分:1)
您的comment_meta哈希似乎是一个&#39;键值对&#39;分别是ids和布尔值。如果这是真的,那么你可能最好使用users_comment_metas&#39;通过&#39;表
您将受益于重组此方法,因为:
如果你真的想要去你所建议的哈希路线,可能有很多事情阻止它保存。以下是我要排除故障的方法:
当您在终端中点击调试器语句时,请键入单词 &#39; eval comment_params&#39;检查您提交的评论参数(我假设您正在使用强参数gem,看到您在此帖子的标签中键入&#39; ruby-on-rails-4&#39;)< / p>
哈希应具有上述建议的结构(如果它看起来不同, 您的表单中存在错误,或者您的参数设置不正确,更多信息here):
&#34; comment_meta&#34; =&gt; {&#34; 155&#34; =&gt;&#34; 0&#34;,&#34; 156&#34; =&gt;&#34; 1&#34;,&#34; 157&#34; =&gt;&#34; 0&#34;}
输入&#39; n&#39;直到您通过使用参数
初始化新对象的行@comment = Comment.new(comment_params)
现在输入&#39; eval @ comment&#39;要查看新对象,请键入&#39; eval @ comment.comment_meta&#39;查看是否存储了哈希。如果它返回nil,则输入&#39; eval @ comment.valid?&#39;。如果它返回true,则输入@ comment.errors以查看错误,并相应地修复。
如果所有其他方法都失败了,请确保您可以手动将任何给定哈希值分配给rails控制台中新Comment对象的comment_meta:
@comment = Comment.new() @ comment.comment_meta = {&#34; test&#34; =&gt;&#34; 1&#34;} @ comment.save!
我希望这能让你走上正轨。