Rails 3 Jquery Star Rating插件问题提交

时间:2011-07-11 20:03:41

标签: jquery ruby-on-rails

我正在尝试使用Rails 3和JQuery Star Rate插件http://orkans-tmp.22web.net/star_rating/index.html#main-menu=1&demo-tabs=1。问题是插件生成的隐藏字段没有以rails形式提交

<%= form_for(@wine) do |f| %>
 <h3 class="h3wine"></h3>
 <div class="field">
  <%= f.label :name , :class => "left"%>
  <label class="right"><%= f.text_field :name %> </label><br />
 </div>
 <div class="note_fields">
   <h2 style="margin-left: 20%;">Note</h2>
    <% f.fields_for :notes do |builder| %>
   <%= render 'note_fields', :f => builder %>
<% end %>   
  </div>

 <span>
   <%= f.submit %>
 </span>
<% end %>

然后部分note_fields.html.erb就像

<script>

  $("#stars-wrapper1").stars();
 </script>
 <p>
<div class="field">
    Rating: <span id="stars-cap"></span>
        <div id="stars-wrapper1">
            <br>
            <% [ '1', '2', '3', '4', '5' ].each do |rates| %>
                <%= f.radio_button :rating, rates%>
            <% end %>
        </div>                
    </div>
  <div class="field">
    <%= f.label :text, :class => "left" %>
    <label class="right"><%= f.text_area :text,:size => "60x12" %></label><br />
  </div>
</p>

所以一切都很好,与显示星星有关,并显示数据库中“评级”的值。问题是在日志文件中提交字段评级时没有。

生成的hiiden字段是这样的:

<input type="hidden" value="5" name="wine[notes_attributes][0][rating]" disabled="">

一旦星星变化,它会得到很好的更新。

在日志中显示:

Parameters: {"commit"=>"Update Wine", "wine"=>{"name"=>"Borba", "notes_attributes"=>{"0"=>{"text"=>"borbocas", "id"=>"6666"}}}, "authenticity_token"=>"/FsKTnSm2eAvPQiXie

喔。如果它有帮助,如果我不使用插件并保留radio_buttons它可以正常工作。

感谢您的帮助:)

更新 - 感谢大家 -

完全是@Kris :)我意识到昨天晚上..但我太累了,无法发布答案。非常感谢:)

所以我将javascript函数绑定到提交事件表单。因此,在提交表单时,将删除属性disabled。 因为每次单击星标时,此隐藏字段都会更新,因此插入了禁用字段

 <script>
 $("form").submit(function () { 
     $("input[name^=\"wine[notes_attributes][0][rating]\"]").removeAttr("disabled");}‌​);
 $("#stars-wrapper1").stars(); 
 </script>
Thanks guys :)

4 个答案:

答案 0 :(得分:1)

检查你的jquery版本,星级评级支持jquery高达1.5.2。 较新的jquery版本确实属于这个错误。

答案 1 :(得分:1)

问题是生成的隐藏字段具有禁用属性,禁用字段对提交无效。

阅读本文: http://www.w3.org/TR/html4/interact/forms.html#h-17.12

我自己使用jQuery UI Stars v3.0.1,jQuery 1.6.1并且仍然试图找到解决方案。

<强>更新

好的,我想出了一个解决方案。这是一个黑客,但它解决了这个问题。

基本上我使用jQuery来浏览隐藏的输入并删除已禁用的属性:

$("input[type=hidden]").removeAttr("disabled");

答案 2 :(得分:0)

看起来应该发布该属​​性。

在你的模特上你需要这样的东西吗?

attr_accessible:rating

或者您是否以任何方式限制可访问的内容?

答案 3 :(得分:0)

我正在运行JQuery 1.7.2和JQuery UI Stars 3.0.1。

似乎回归与JQuery现在处理布尔属性的方式有关......

以下是我的更改:

73: o.disabled = o.disabled || (o.isSelect ? $(self.$selec).is(':disabled') : $(this).is(':disabled'));

155: self.$value.attr({disabled: o.disabled, value: o.value});