Rails 4 - 在控制器动作中渲染部分而不是视图

时间:2014-10-23 01:06:50

标签: ruby-on-rails ruby

这是我的UsersController的show动作,我用它来查看我网站上每个用户的个人资料视图:

def show

    user = User.find(params[:id])

    @conversations ||= user.mailbox.inbox.all

    @active_requests = user.requests.all.select { |r| r.request_complete == nil }
    @completed_requests = user.requests.all.select { |r| r.request_complete != nil }

    @reviews_received = Review.received_by_user(user)
    @reviews_given = Review.given_by_user(user)

    respond_to do |format|
        format.html 
        format.json
    end

end

如您所见,我在这一行动中访问了四种不同的模型。我想在自定义操作中将这些实例变量声明移动到每个模型的相应控制器中。 我需要以某种方式对每个动作附加部分,然后我将在users/show.erb视图中进行渲染。

我不确定如何渲染部分并将部分“附加”到某个动作,以便它可以访问该动作的实例变量。这就是我所做的 到目前为止,评论模型:

我在index_reviews_received内创建了一个操作ReviewsController,并且这个部分:reviews/_index_reviews_received.erb

users/show.erb内,我试过了      <%= render 'reviews/index_reviews_received' %>,但无法访问@reviews_receivedindex_reviews_received操作中的ReviewsController实例变量。

评论/ _index_reviews_received.erb

<% @reviews_received.each do |received| %>

   <%= received.feedback %>
   <%= received.rating  %>
   ...

<% end %>

ReviewsController

def index_reviews_received

#not actual query, just keeping it simple while I figure this out.
    @reviews_received = Review.all.limit(10)

end

审核路线

resources :reviews do
      collection do
          get :index_reviews_received
          get :index_reviews_given    
      end
end

如果您认为我的方法不对,请告诉我。谢谢!

1 个答案:

答案 0 :(得分:0)

@stefvhuynh是正确的。您已实例化UsersController#show方法,只获取在其中调用的实例变量。

应该在该调用中找到显示用户时所需的任何内容(实例变量)。你仍然可以使用局部来干掉你的观点。