2014-10-04 170 views
-1

我實現了一個保存按鈕的工作,它做工精細,現在我想列出一些在工作索引頁保存工作爲了這個,我有這樣的代碼Rails的多對多關聯

<h3>Saved Jobs</h3> 
<ul> 
<% @user.saved_jobs.limit(5).order(:created_at).reverse_order.each do |saved_job| %> 
<li><%= link_to saved_job.job.title, saved_job.job.url %> 
<span class="delete_button">  
<%= link_to "X", saved_job, :method => :delete, :remote => true %></span></li> 
<% end %> 
</ul> 
<%= link_to "see all", saved_jobs_path %> 

但是當我希望獲得的職位索引頁我得到這個錯誤undefined methodsaved_jobs' for nil:NilClass

這個我saved_jobs控制器

class SavedJobsController < ApplicationController 
    before_filter :authenticate_user! 

    def index 
     @saved_jobs = SavedJob.find_all_by_user_id(current_user.id) 
    end 

    def create 
     @job = Job.find(params[:saved_job][:job_id]) 
     current_user.save_job!(@job) 

     respond_to do |format| 
      format.html { redirect_to @job } 
      format.js 
     end 
    end 

    def destroy 
     @job = SavedJob.find(params[:id]).job 
     current_user.saved_jobs.find(params[:id]).destroy 

     respond_to do |format| 
      format.html { redirect_to @job } 
      format.js 
     end 
    end 

end 

,這是我的用戶控制器

class ProfilesController < ApplicationController 

    before_filter :authenticate_user! 


    def show 
    @user = User.find_by_slug(params[:id]) 
    if @user 
     @posts = Post.all 
     render action: :show 
    else 
     render file: 'public/404', status: 404, formats: [:html] 
    end 
    end 


    def index 
    @users = user_scope.paginate(page: params[:page], per_page: 2) 
    end 

    private 

    def user_scope 
    current_user ? User.where.not(id: current_user.id) : User.all 
    end 

end 
+0

你'@ user'變量似乎同等零,還你可以/應該將'.saved_jobs.limit(5 ).order(:created_at).reverse_order.each do | saved_job |'到您的控制器,而不是通過created_at排序和反轉順序,您可以使用降序。你應該創建一個可以重用的範圍。在你看來,你應該只看到'@ user_jobs.each' – mymlyn 2014-10-04 23:09:50

+0

哪個控制器和動作渲染你發佈的視圖? – John 2014-10-04 23:15:14

+0

saved_jobs控制器 – userails 2014-10-04 23:16:19

回答

0

錯誤提示您未在控制器操作中設置@user。你能從你的控制器發佈代碼嗎?基於控制器代碼

更新:

在SavedJobsController您的索引行爲沒有設置@user。當你在視圖中調用@user.saved_jobs.limit(5)..etc... @user是零,而不是current_user或其他。

此外,你已經設置@saved_jobs - 爲什麼不只是使用,而不是@ user.saved_jobs?

例如:

#in SavedJobsController 
def index 
    @saved_jobs = current_user.saved_jobs.limit(5).order('created_at DESC') 
end 

,然後在您的視圖: <% @saved_jobs.each do |saved_job| %>

+0

感謝您的幫助,現在它的工作我已將代碼更改爲此<%@ current_user.saved_jobs.each do | saved_job | %> – userails 2014-10-05 00:04:24

+0

很高興它的工作。可能你的意思是'current_user'而不是'@ current_user'?無論哪種情況,SavedJobsController的索引操作中的rails約定都會設置一個實例變量來保存相應對象的集合(例如,在本例中爲@saved_jobs),然後在相應的視圖中使用它。因此,如果您希望'current_user.saved_jobs',則將其分配給控制器中的@saved_jobs,並在視圖中使用'@saved_jobs.each do | saved_job |'。目標是儘可能減少邏輯意見。 – John 2014-10-05 00:12:38

+0

是的,這是你在你的答案中提出的建議,但它不起作用,它給了我同樣的錯誤消息 – userails 2014-10-05 00:15:30