簡體   English   中英

Rails:current_user.vote_up(@micropost)未定義方法

[英]Rails: current_user.vote_up(@micropost) undefined method

我目前正在獲得一種不確定的方法,用於添加<% if current_user.vote_up?(@micropost) == true %> ,我不確定是什么原因引起的錯誤,因為我是在micropost控制器中定義此錯誤的。 有什么建議么?

微站控制器

 def vote_up
    @micropost = Micropost.find(params[:id])
    current_user.vote_exclusively_for(@micropost)
    current_user.vote_up(@micropost)
    respond_to do |format|
      format.html { redirect_to :back }
      format.js
      end
  end

   def unvote
    @micropost = Micropost.find(params[:id])
    current_user.vote_exclusively_against(@micropost)
    current_user.unvote(@thred)
    respond_to do |format|
      format.html { redirect_to :back }
      format.js
      end
  end

Micropost HTML

<% if current_user.vote_up?(@micropost) == true %>
<div class='<%=micropost.id %>'>
<a href="/microposts/<%=micropost.id %>/vote_up" data-remote='true' class='CounterButton b2'>
<span id="CounterIcon" class="<%=micropost.id%>"></span>
</a>
</div>
<% else %>
<div class='<%=micropost.id %>'>
<a href="/microposts/<%=micropost.id %>/unvote" data-remote='true' class='CounterButton b2'>
<span id="CounterIcon" class="<%=micropost.id%>"></span>
</a>
</div>
<% end %>

不能像您打算從視圖中那樣直接調用控制器方法。

此外,MVC分離在Rails中的工作方式似乎有些混亂。

您的current_user變量(在視圖中)對應於“模型”層,因此, vote_up? 應該是current_user類的實例的方法。 這將在models/User.rb或類似的文件中定義,並且應該有一個vote_up? 僅查詢用戶實例並返回布爾值的方法。

這與控制器的表決動作無關。 這本身不會返回任何值:我理解它實際上是在投票贊成一個“微博”。 控制器中的方法將響應用戶的請求而被觸發,對數據庫(模型層)中的對象做一些填充,可能將其中一些模型對象放入變量中,並調用視圖向用戶顯示信息(可能取自這些對象)。 但是,控制器中的方法並不是從視圖中“被調用”的。

順便說一句,按照慣例,在Micropost HTML中執行== true是多余的,按照慣例,方法以?結尾? 返回一個布爾值。 您可以:

<% if current_user.vote_up?(@micropost) %>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM