2017-07-25 7 views
0

Ist es eine schlechte Übung, eine CRUD-Aktion eines Controllers in einem anderen zu erstellen? Zum Beispiel haben wir zwei Modelle User, Post und die folgenden Controller:CRUD-Aktion eines Controllers in einem anderen

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 

kann/soll ich so tun, oder gibt es einen besseren Weg? Der Grund, warum diese Aktionen nicht in ihrem eigenen Controller sind, ist, dass ich Beiträge auf der Benutzerseite manipulieren möchte.

+2

Sie halten meine Tippfehler beheben überschrieben werden. Repariere sie dann selbst :) –

+0

bitte klarstellen, da ich nicht in der Lage bin zu verstehen, als ob du über 'User' Aktionen 'update',' create' und 'Post' Aktionen' update', 'create' reden würdest. –

+0

" Ist es eine schlechte Übung "- nun, es sieht sicherlich komisch aus. Was macht post-bezogene Funktionalität im Benutzer-Controller? Dies verletzt definitiv das Prinzip der geringsten Überraschung :) –

Antwort

1

Es ist eine schlechte Praxis und unpraktisch, wenn Sie bereits eine Assoziation haben. Sie können user Formular und fields_for verwenden, um Posts zu erstellen/aktualisieren.

Sie müssen sich mit build Post instanziiert, in dem Benutzermodell accepts_nested_attributes_for und fields_for in der Ansicht und Benutzer CRUD verwenden speichern/update Beiträge

#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 %> 
Verwandte Themen