Ruby on rails Rails嵌套资源表单

Ruby on rails Rails嵌套资源表单,ruby-on-rails,Ruby On Rails,我的项目有可以创建活动和评价其他人活动的用户。我在两个视图中使用_activitypartial:一个列出用户自己的活动,另一个列出用户尚未评分的其他活动。在后一种情况下,我还包括一个表格来对该活动进行评级。它应该提交到带有当前用户ID、活动ID及其评级的评级模型。我如何获取活动id,因为它们不是@activity变量,只是一个@activities集合,它为每个成员呈现部分活动?我应该切换到每个方法吗 以下是我目前的代码: 对于用户自己的活动索引: class ActivitiesContro

我的项目有可以创建活动和评价其他人活动的用户。我在两个视图中使用_activitypartial:一个列出用户自己的活动,另一个列出用户尚未评分的其他活动。在后一种情况下,我还包括一个表格来对该活动进行评级。它应该提交到带有当前用户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
两个视图中调用partial(not_rated.html.erb)的第二个视图:


评价活动!()
活动部分:

<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>
  • 以前 新的|活动|评级|路径do | f |%>


谢谢

您可以将其作为局部变量传递:

<%= render partial: 'activity', collection: @activities, locals: { activity: @activity } %>

根据_activitypartial中的代码,您已经可以访问
activity
变量,因此不需要在索引或非索引操作中使用实例var
@activity
。您的
render@activities
已经调用了您的
\u activity.html.erb
partial,并且它会自动使一个局部变量
activity
可用于相同的partial

关于活动id,您可以通过执行
activity.id
在部分中获得它。比如:


确保使用强参数或受保护属性的白名单:id。

为了澄清,我添加了not_rated.html.erb视图:它不专门呈现部分,而是呈现@activities。我可以在这里做同样的事情吗?
@activity
activity.new
,我猜
<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>
<%= render partial: 'activity', collection: @activities, locals: { activity: @activity } %>