2013-05-20 30 views
0

有一个问题,那就是困扰我。 我跟随这名“Ruby on Rails的” -Tutorial实现一个Ajax化的评级系统 http://eighty-b.tumblr.com/post/1569674815/creating-an-ajaxified-star-rating-system-in-rails-3带有奇怪帮手方法的Rails评分系统

模具笔者采用名为“rating_ballot”自写的辅助方法,它似乎相当多余的我,因为它会检查,如果评级已经给出了尚未否则形成一个新的与

current_user.ratings.new 

但实际上正在使用这种辅助方法,形式看起来像这样

做在ratingscontroller

或多或少

但是任何其他形式(例如发布评论)使用实例变量而不是辅助方法。

我想要的form_for标记看起来像这样

= form_for(@rating, :html => { :class => 'rating_ballot' }) do |f| 

,但这仅适用于更新的收视率,没有创造新的问题。

为什么这个“rating_ballot”如此重要?

回答

0

就这一部分看

def rating_ballot 
    if @rating = current_user.ratings.find_by_photo_id(params[:id]) 
     @rating 
    else 
     current_user.ratings.new 
    end 
end 

它试图找出通过行为是否存在,如果不exsits

创建新实例

在你控制器,例如,你可以做到这一点:

@rating = current_user.ratings.find_by_photo_id(params[:id]) 
@rating ||= current_user.ratings.new # create instance if did not find existing once 

ANS然后用它在形式上像你写

+0

我究竟如何将它放在我的方法中? @rating变量已经设置了Rating.new ...为什么我需要current_user.ratings.new? –

0

我猜的0123价值是零,这就是为什么使用此表格为#create操作不起作用。第一个参数应该是new对象或表示现有记录的对象,以便分别创建或更新。

使用form_for方法的另一种替代方法是提供一个代表该类名称的符号,并根据指定路线的方式指定:url参数。这仅适用于创建,因为该符号不代表现有记录。