2013-12-19 183 views
1

我的項目中有用戶可以創建活動併爲其他人的活動評分。我在兩個視圖中使用了一個_activity部分:一個列出用戶自己的活動,一個列出用戶尚未評級的其他活動。在後一種情況下,我還包括一個表格來評估該活動。它應該使用當前用戶的ID,活動的ID和他們的評級向評級模型提交。我怎樣才能得到活動ID,因爲他們不是@activity變量,只是一個@activities集合,它爲每個成員呈現部分?我應該切換到每種方法嗎?Rails嵌套資源表單

這裏是我到目前爲止的代碼:爲用戶自己的活動指數

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 

的第二兩個視圖稱爲部分(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部分:

<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

您的代碼立足於_activity部分,你已經進入一個activity變量,這樣你就不會在你的索引需要一個實例變種@activity或not_rate動作。您的render @activities已經調用您的_activity.html.erb部分,並自動使局部變量activity可用於相同的部分。

關於activity_id,你可以在你的部分做activity.id。喜歡的東西:

<%= f.hidden_field :id, value: activity.id %>

確保白名單:ID與任何strong_parameters或protected_attributes。

0

你可以把它作爲一個局部變量:

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

我添加了not_rated.html.erb視圖以進行說明:它不是專門呈現部分圖像,而是呈現@activities。我可以在這裏做同樣的事嗎? – thisAnneM

+0

也傳遞集合,請參閱已更新的答案 – NARKOZ

+0

其中'@ activity'爲'Activity.new',我想 – NARKOZ