我的项目的用户可以创建活动并评估其他人的活动。我在两个视图中使用_activity partial:一个用于列出用户自己的活动,另一个用于列出用户尚未评级的其他活动。在后一种情况下,我还包括一个表格来评估该活动。它应该使用当前用户的ID,活动的ID和他们的评级提交给评级模型。如何获取活动ID,因为它们不是@activity变量,只是一个@activities集合,它为每个成员呈现部分?我应该切换到每种方法吗?
到目前为止,这是我的代码:
表示用户自己的活动索引:
class ActivitiesController < ApplicationController
def index
@user = current_user
@activities = @user.activities.paginate(page: params[:page], :per_page => 10).order(created_at: :desc)
end
其他人的活动页面评分:
def not_rated
@user = current_user
@activities = Activity.not_rated(current_user).paginate(page: params[:page], :per_page => 10).order(created_at: :desc)
@rating = Rating.new
end
调用partial(not_rated.html.erb)的两个视图中的第二个:
<div class="rate_activities">
<h3> Rate Activities! (<%= @activities.count %>)</h3>
<% if @activities.any? %>
<%= render @activities %>
<%= will_paginate @activities %>
<% end %>
</div>
_activity partial:
<ul class="activities" >
<li class="activity">
<span class="content"><%= activity.content %></span>
<span class="timestamp"><%= time_ago_in_words(activity.created_at) %> ago</span>
<% unless activity.user_id == @user.id %>
<%= form_for([@rating, activity]) :url => new_activity_rating_path do |f| %>
<p><%= f.text_field :rating %></p>
<%= f.submit "Submit my Activity", class: "mybutton" %>
<% end %>
<% end %>
</li>
谢谢!
答案 0 :(得分:0)
您可以将其作为局部变量传递:
<%= render partial: 'activity', collection: @activities, locals: { activity: @activity } %>
答案 1 :(得分:0)
基于_activity partial中的代码,您已经可以访问activity
变量,因此您的索引或not_rate操作中不需要实例var @activity
。您的render @activities
已经调用了_activity.html.erb
部分内容,它会自动为同一部分提供本地变量activity
。
关于activity_id,您可以通过activity.id
获取部分内容。类似的东西:
<%= f.hidden_field :id, value: activity.id %>
确保使用strong_parameters或protected_attributes进行白名单:id。