2011-04-02 66 views
0

基于这两个答案创建一些简单的ajax评分有点麻烦。 Rails 3 rateable model - How to create ajax rating?Rails ajax rating help how to create a helper method to display starsRails帮助创建ajax星级评分

我碰到下面的错误在我的驾驶员学校的看法:

NameError in Kategoris#show 

Showing C:/Rails/konkurranceportalen/app/views/kategoris/_rating.html.erb where line #2 raised: 

undefined local variable or method `f' for #<#<Class:0x3c77820>:0x3c724f8> 

Extracted source (around line #2): 

1: <%= form_tag url_for(controller: 'konkurrancers', action: 'rate', id: "#{vind.id}"), remote: true %> 
2: <%= f.text_field :ratings, :size => 1, :min => 0, :max => 5, :step => 1 %> 
3: <div class="rateit" data-rateit-backingfld="#konkurrancer_ratings" data-rateit-resetable="true"> 
4: </div> 
5: </form> 

我的驾驶员学校放映视图:

<h1><%= @kategori.h2.force_encoding("UTF-8") %></h1> 
<div id="konkurrancer"><%= render 'konkurrencer', :remote => true %></div> 
</div> 

我konkurrencer部分:

<div id="tabel"> 
<table id="tabel1" border="0" bordercolor="#000000" style="background-color:#FFFFFF" width="725" cellpadding="0" cellspacing="0"> 
    <tr id="toptr"> 
     <td><%= sortable "name", "Navn" %></td> 
    </tr> 
<% @konkurrancer.each do |vind| %> 
    <tr class="thumbnail-item" onclick="window.open('<%= vind.tracking %>')" onmouseout="this.style.background='white';" onmouseover="this.style.background='#99ff33';this.style.cursor='pointer'"> 
     <td width="280px" style="padding-left: 5px;"><%= truncate(vind.name.force_encoding("UTF-8"), :length => 45) %></td> 

<td><div id="container"><%= render :partial => "rating", :remote => true, :locals => { :vind => vind } %></div></td> 

</div> 
    </tr> <% end %> 
</table> 
<div id="pagenavi"> 
<%= hidden_field_tag :direction, params[:direction] %> 
<%= hidden_field_tag :sort, params[:sort] %> 
</div> 

我的等级分:

<%= form_tag url_for(controller: 'konkurrancers', action: 'rate', id: "#{vind.id}"), remote: true %> 
<%= f.text_field :ratings, :size => 1, :min => 0, :max => 5, :step => 1 %> 
<div class="rateit" data-rateit-backingfld="#konkurrancer_ratings" data-rateit-resetable="true"> 
</div> 
</form> 

我rate.js:

$('#<%= @container %>').html('<%= escape_javascript(render(partial: 'rating', locals: { konkurrancer: @konkurrancer })) %>'); 

我konkurrancers控制器:

def rate 
    @konkurrancer = Konkurrancer.find(params[:id]) 
    @container = "Konkurrancer"[email protected]_s 

    @theme.rating_score += params[:rating].to_i 
    @theme.ratings += 1 
    @theme.save 

    respond_to do |format| 
     format.js 
    end 
    end 
end 
+0

找你的错误信息不会在您的示例代码相匹配。在你的错误信息中,id被设置为id:vind.id,在你的例子中,代码被设置为id:konkurrancer.id。请澄清。 – 2011-04-02 16:16:08

+0

我已经更新了我的答案。该ID设置为vind.id – 2011-04-02 16:26:18

回答

2

的问题是,vind没有在你的部分规定,你是不是把它当作一个本地变量。为了解决这个问题,你会想改变rate.js通过vind为本地变量,而不是konkurrancer

$('#<%= @container %>').html('<%= escape_javascript(render(partial: 'rating', locals: { vind: @konkurrancer })) %>'); 

,并在您konkurrancer部分:

<%= render 'rating', :remote => true, locals: { vind: vind } %> 

然后,您可以留下您的分级部分,因为它与id: vind.id

+0

我仍然收到错误。我应该如何呈现评分。我现在怎么下面的代码:<%= render'rating',:remote => true%> – 2011-04-02 16:41:43

+0

我错过了它的使用,但它的工作方式与其他部分渲染调用相同。我已经更新了我的答案。 – 2011-04-02 16:48:35

+0

仍然得到NameError – 2011-04-02 16:54:34

0

对于Rails开发3.1及更高版本,可以检查letsrate gem