我有两个存储内容的表(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 %>
我想要做的是,而不是更新review属性的复选框(label_tag),我想将form_for更改为线程。如果在提交之前选中了复选框,我希望它填充线程表,而不是填充微博表。更新上述视图的最佳方法是什么? 感谢
答案 0 :(得分:0)
这可以(而且应该)在MicropostsController中轻松完成,而不是View。假设这应该创建一个新的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,因为它是一个保留字,可能会产生一些非常“有趣”的后果......