在另一个控制器中创建一个CRUD操作之一是不好的做法吗?例如,我们有两个模型User
,Post
和以下控制器:
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
end
def update_post #update action of PostsController
Post.find(params[:post_id]).uppdate_attributes(params[:post])
end
def create_post #create action of PostsController
@user = User.find(params[:id])
@user.posts.create(params[:post])
end
end
可以/我应该这样做还是有更好的方法?这个动作不在他们自己的控制器中的原因是我想操纵用户页面上的帖子。
答案 0 :(得分:1)
如果您已经有关联,这是不好的做法并且不切实际。您可以使用user
表单和fields_for
来创建/更新帖子。
您需要使用build
实例化帖子,添加到用户模型accepts_nested_attributes_for
并在视图中使用fields_for
,用户CRUD将保存/更新帖子
#user controller
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
@user.posts.build
end
end
#user model
accepts_nested_attributes_for :posts
#user/show view
<%= form_for @user do |f| %>
<%= f.fields_for :posts do |post| %>
<%= post.text_field :post %>
<% end %>
<% end %>