0

我有两个存储内容的表(2 个单独的模型:微帖子和线程)

它们非常相似,除了名字

create_table "microposts", :force => true do |t|
    t.text     "content"
    t.integer  "user_id"
    t.datetime "created_at",                         :null => false
    t.datetime "updated_at",                         :null => false
    t.boolean  "review",          :default => false
  end

create_table "threads", :force => true do |t|
    t.text     "content"
    t.integer  "user_id"
    t.datetime "created_at",                         :null => false
    t.datetime "updated_at",                         :null => false
  end

这是我的看法

<%= form_for @micropost, :html => {:multipart => true} do |f| %>
  <%= render 'shared/error_messages', object: @micropost %>
  <div class="field">
    <%= f.text_area :content, :cols => 5, :rows => 5, :placeholder => "This field is required" %>
  </div>
    <label for="a"><%= label_tag(:micropost_review, "Does this need review?") %><%= f.check_box :review %></label></div>
 <br><br>
<%= f.submit "Post", class: "btn btn-large btn-primary" %>
<% end %>

我想要做的是,而不是更新评论属性的复选框(label_tag),我想将 form_for 更改为线程。如果在提交之前选中了复选框,我希望它填充线程表,而不是填充 microposts 表。更新上面的视图以执行此操作的最佳方法是什么?谢谢

4

1 回答 1

0

这可以(并且应该)在 MicropostsController 中轻松完成,而不是在视图中完成。假设这应该创建一个新的 Micropost 或 Thread:

def create
  if params[:micropost][:review]
    params[:micropost].delete :review
    @thread = Thread.create!(params[:micropost])
  else
    @micropost = Micropost.create!(params[:micropost])
  end
 end

请注意,重要的是避免传递额外的属性来创建!否则它会失败。

另外,不要使用 Thread ,因为它是一个保留字,可能会产生一些非常“有趣”的后果......

于 2013-05-08T06:36:07.033 回答