2015-05-28 74 views
0

我不能爲我的生活找出這個錯誤。控制器#中的NoMethodError像

enter image description here

NoMethodError in ValuationsController#like 
undefined method `valuation_likes` for #<User:0x007fb3b21b9fc8> 
#LINE IN VALUATIONS_CONTROLLER: @valuation_like = current_user.valuation_likes.build(valuation: @valuation) 

代碼的目的是使得用戶可以其他用戶的值(又名:valuations)。

valuations_controller

def like 
    @valuation = Valuation.find(params[:id]) 
    @valuation_like = current_user.valuation_likes.build(valuation: @valuation) 
    if @valuation_like.save 
     @valuation.increment!(:likes) 
     flash[:success] = 'Thanks for liking!' 
    else 
     flash[:error] = 'Two many likes' 
    end 
     redirect_to(:back) 
    end 

valuation_like.rb

class ValuationLike < ActiveRecord::Base 
    belongs_to :valuation 
    belongs_to :user 
    validates :user, uniqueness: { scope: :valuation } 
    belongs_to :liker, class_name: 'User', foreign_key: :user_id 
end 

valuation.rb

has_many :valuation_likes 
    has_many :likers, through: :valuation_likes, class_name: 'User', source: :liker 
    has_many :comment_likes 

估值/節目

<% @valuation.likers.each do |user| %> 
    <%= user.name %> 
<% end %> 

<%= link_to like_valuation_path(:id => @valuation.id), class: "btn", method: :post do %> 
    <span class='glyphicon glyphicon-thumbs-up'></span> Like 
<% end %> 

模式

create_table "valuation_likes", force: true do |t| 
    t.integer "user_id" 
    t.integer "name" 
    t.integer "likes" 
    t.integer "valuation_id" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    end 

    create_table "valuations", force: true do |t| 
    t.boolean "conceal", default: false 
    t.integer "user_id" 
    t.datetime "created_at",     null: false 
    t.datetime "updated_at",     null: false 
    t.integer "likes" 
    t.text  "name" 
    end 

    add_index "valuations", ["user_id", "created_at"], name: "index_valuations_on_user_id_and_created_at" 
    add_index "valuations", ["user_id"], name: "index_valuations_on_user_id" 

謝謝!請讓我知道,如果你需要了更多的代碼,說明,或視覺效果:)

+0

在您的控制器我看到'valuation_likes' ..但錯誤我看到'valuation_like'。注:** **複數控制器內的形式..它是怎麼發生的? –

+1

顯示用戶模型。 –

+0

我認爲'用戶'模型已經錯過了'has_many:valuation_likes'這行。,,請檢查相同的 –

回答

1

我認爲在User模型,你沒有行has_many :valuation_likes。添加它,它會工作

1

你可以考慮檢查約polymorphic associations,併爲可重用性做一個'喜歡'的類。

+1

謝謝@chad的建議,這就是我現在要做的工作:) –

1

正如奧雅納所說,您的用戶模型中沒有「has_many」關係。

或者,你可以做...

@valuation_like = @valuation.valuation_likes.build(user: current_user) 
相關問題