2017-07-25 50 views
0

在另一個控制器的另一個控制器中創建一個CRUD動作是否是一種不好的做法?例如,我們有兩個型號UserPost及以下控制器:一個控制器在另一個控制器中的CRUD動作

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 

可以/我應該做的這樣,還是有更好的辦法?這種行爲不是在他們自己的控制器中的原因是我想操縱用戶頁面上的帖子。

+2

你保持覆蓋我錯字修復。然後自己修復:) –

+0

請澄清,因爲我無法理解,就像你正在談論'用戶'行動'更新','創造'和'後'行動'更新','創造' –

+0

「是嗎?一個不好的做法「 - 好吧,它看起來很奇怪。什麼是在用戶控制器中的相關功能?這絕對違反了最小驚喜的原則:) –

回答

1

如果您已經建立了關係,那麼這樣做是不好的做法,也是不切實際的。您可以使用user表格和fields_for創建/更新`帖子。

您需要實例化後與build,添加到用戶模型accepts_nested_attributes_for並在視圖和用戶CRUD使用fields_for將保存/更新帖子

#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 %> 
相關問題