Rails 帮助创建 ajax 星级 [英] Rails help creating ajax star rating

查看:32
本文介绍了Rails 帮助创建 ajax 星级的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在根据这两个答案创建一些简单的 ajax 评级时遇到了一些麻烦.Rails 3 评分模型 - 如何创建 ajax 评分?Rails ajax 评级帮助如何创建一个显示星星的辅助方法

我的分类视图中出现以下错误:

分类中的名称错误#show显示 C:/Rails/konkurranceportalen/app/views/kategoris/_rating.html.erb 其中第 2 行提出:#<#<Class:0x3c77820>:0x3c724f8>的未定义局部变量或方法`f'提取的源代码(围绕第 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>

我的分类展示视图:

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

我的 konkurrencer 部分:

<table id="tab1" border="0" bordercolor="#000000" style="background-color:#FFFFFF" width="725" cellpadding="0" cellspacing="0"><td><%=可排序的名称"、导航"%></td></tr><% @konkurrancer.each 做 |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 =>"评级", :remote =>真的,:locals =>{ :vind =>vind }%></div></td>

</tr><%结束%><div id="pagenavi"><%= hidden_​​field_tag :direction, params[:direction] %><%= hidden_​​field_tag :sort, params[:sort] %>

我的评分部分:

<%= 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">

</表单>

我的 rate.js:

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

我的 konkurrancers 控制器:

 定义率@konkurrancer = Konkurrancer.find(params[:id])@container = "Konkurrancer"+@Konkurrancer.id.to_s@theme.rating_score += params[:rating].to_i@theme.ratings += 1@theme.saveresponse_to do |格式|格式.js结尾结尾结尾

解决方案

问题是 vind 没有在你的局部变量中定义,你也没有将它作为局部变量传递.要解决此问题,您需要更改 rate.js 以将 vind 作为局部变量而不是 konkurrancer 传递:

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

在你的 konkurrancer 部分:

<%= render 'rating', :remote =>真的,当地人:{ vind: vind } %>

然后您可以使用 id: vind.id 保留部分评分.

I am having a bit trouble creating some simple ajax rating based on these two answers. Rails 3 rateable model - How to create ajax rating? and Rails ajax rating help how to create a helper method to display stars

I get the following error in my kategori view:

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>

My kategori show view:

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

My konkurrencer partial:

<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>

My ratings partial:

<%= 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>

My rate.js:

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

My konkurrancers controller:

  def rate
    @konkurrancer = Konkurrancer.find(params[:id])
    @container = "Konkurrancer"+@Konkurrancer.id.to_s

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

    respond_to do |format|
        format.js
    end
    end
end

解决方案

The problem is that vind is not defined in your partial and you aren't passing it as a local variable either. To fix this you'll want to change rate.js to pass vind as the local variable instead of konkurrancer:

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

and in your konkurrancer partial:

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

You can then leave your ratings partial as it is with id: vind.id.

这篇关于Rails 帮助创建 ajax 星级的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
其他开发最新文章
热门教程
热门工具
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆