这是我的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_received
中index_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
如果您认为我的方法不对,请告诉我。谢谢!
答案 0 :(得分:0)
@stefvhuynh是正确的。您已实例化UsersController#show方法,只获取在其中调用的实例变量。
应该在该调用中找到显示用户时所需的任何内容(实例变量)。你仍然可以使用局部来干掉你的观点。