mehrere Steuerungen in einem view (ruby on rails, MVC)

Hey Leute ich brauche Eure wertvolle Hilfe. In der Ruby on Rails tutorial, am 10ten Kapitel, der Autor hat 2 Controller auf einen Blick. Ich Baue eine ähnliche app, in der ich auch 2 Controller auf einen Blick, jedoch, wenn ich die render-Methode, die gehört zur zweiten controller, von den ersten habe ich Probleme mit den params. (im tutorial wird der Autor verwendet keine Parameter in der Aktion des anderen Controllers)

Genauer gesagt habe ich 2 Controller: UsersController und MicropostsController. Auch in der show.html-Code.haml Seite der Nutzer, benutze ich beide Controller: UsersController für das zeigen des Benutzers microposts und MicropostsController, um dem Benutzer zu ermöglichen, erstellen Sie eine neue micropost.

Innen MicropostsController:

def create
  @micropost = current_user.microposts.build(params[:micropost])
  if @micropost.save
    flash[:success] = "Micropost created!"
    redirect_to user_path(current_user)
  else
    #render text: renderActionInOtherController(UsersController,:show, {:id => 1})
    @user = User.find(current_user)
    @microposts = @user.microposts.paginate(page: params[:page])
    render 'users/show'
  end
end

Innen UsersController

def show
  @user = User.find(params[:id])
  @microposts = @user.microposts.paginate(page: params[:page])
  @micropost = current_user.microposts.build if signed_in?
end

In der app/views/users/show.html-Code.haml

- provide(:title, @user.name)
.users_page
  .row
    %aside.span4
      - if !signed_in?
        %section
          %h1
            = gravatar_for @user
            = @user.name
      - else
        %section
          = render 'shared/user_info'
        %section
          = render 'shared/micropost_form'

    .span8
      - if @user.microposts.any?
        %h3 Microposts (#{@user.microposts.count})
        %ol.microposts
          = render @microposts
        = will_paginate @microposts

Also im Grunde meine Frage zusammengefasst wie folgt:

1)Ist es eine gute Praxis, haben mehrere Steuerungen in 1-Ansicht? Ich habe festgestellt widersprüchliche Antworten im Netz. (eigentlich bin ich nicht einmal sicher, ob dieser code bleibt RESTful)

2) Wenn 1 ist ja (oder zumindest ist es nicht eine schlechte Praxis) konnte ich umsetzen, die gleiche Sache in einer effizienteren Art und Weise? Weil so wie ich das sehe, jedes mal, wenn ich die render-Aktion von einem anderen controller habe ich neu definieren der Variablen.

3) fand ich einen ähnlich Thema in stackoverflow in die man schlägt, um diese Methode (die ich nicht bekommen, was es genau macht, da ich neu bin im RoR).

def renderActionInOtherController(controller,action,params)
  controller.class_eval{
    def params=(params); @params = params end
    def params; @params end
  }
  c = controller.new
  c.request = @_request
  c.response = @_response
  c.params = params
  c.send(action)
  c.response.body
end

Wenn ich diese version des create-Aktion innerhalb MicropostsController,

def create
  @micropost = current_user.microposts.build(params[:micropost])
  if @micropost.save
    flash[:success] = "Micropost created!"
    redirect_to user_path(current_user)
  else
    render text: renderActionInOtherController(UsersController,:show, {:id => 1})
    #@user = User.find(current_user)
    #@microposts = @user.microposts.paginate(page: params[:page])
    #render 'users/show'
  end
end

wenn ich den post-button, den ich Total nichts im browser. Außerdem, wenn ich versuche, eine Ansicht tha Benutzer/1 Seite erhalte ich die folgende Fehlermeldung(!!):

undefined method `[]' for nil:NilClass

Jede Hilfe wird wirklich wertvoll! Wenn Sie alle anderen info bitte informieren Sie mich!

InformationsquelleAutor vasilakisfil | 2012-11-07
Schreibe einen Kommentar