2017-07-25 5 views
0

コントローラーのCRUDアクションの1つを別のコントローラーに作成することは悪い習慣ですか?例えば、我々は二つのモデル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 

/Iは次のように行うか良い方法があるはずですができますか?このアクションが自分のコントローラにない理由は、ユーザーページの投稿を操作したいからです。

+2

を保存します。あなた自身を修正してください:) –

+0

'User'アクション' update'、 'create'、' Post'アクション 'update'、' create'について話しているかのように理解できないので、明確にしてください。 –

+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 %> 
関連する問題