1

次の行は、ユーザーがクリックして5つ星の評価を行うと、DOMのjqueryによって生成されます。

<input type="hidden" name="review[answer01]" id="review_answer01" value="5">

どういうわけか、私のコントローラーはparams [:review] [:answer01]のこの値を取得していません

送信ボタンをクリックしても、非表示の値がまったく送信されていないように見えます。フォームは最初に存在しないため、非表示フィールドを認識していませんか?これを修正するにはどうすればよいですか。

単純なラジオボタン選択ですべてが正常に機能しました。

ところで、同じコード行をフォームに手動で追加しましたが、機能しました。置いた

<%= f.hidden_field :answer01, :value => 5 %>

htmlを生成しました:

<input id="review_answer01" name="review[answer01]" type="hidden" value="5">

わからない...

編集:

これがjsソースですここにjsがあります:https ://github.com/wbotelhos/raty/blob/master/js/jquery.raty.js

入力タグは62行目で生成され、IDを指定するために少し変更しました(それが問題であるかどうかはわかりませんでした)。

私の62行目:self.score = $('<input />', { type: 'hidden', name: self.opt.scoreName, id: self.opt.scoreId}).appendTo(self);

IDを設定するオプションを提供するために追加scoreID : 'blank'しました。$.fn.raty.defaults {}

今、私の見解の中に私は持っています:

<table class='table'>
  <tbody>

  <%= simple_form_for @review, :html => { :multipart => true } do |f| %>

    <td style='width:115px; padding-top:10px;'><div id="s1"></td>
    <td><h3 style = 'padding-bottom:3px;'><%= @questions[0] %></h3></td>

    [...] (repeated for other questions)

  </tbody>
</table>

  <div style='margin-left:80px; margin-top:20px; margin-bottom:200px;' id='subbut'>
    <%= f.button :submit, "Submit Review", :class=>'btn btn-large' %>
  </div>
  <% end %>

<script>
$('#s1').raty({
    scoreName : 'review[answer01]',
    scoreId : 'review_answer01'
});
</script>

5/5の星を選択したFirebugDOM分析で見たもの:

<td style="width:115px; padding-top:10px;">
<div id="s1" style="cursor: pointer; width: 100px; ">
  <img src="/assets/star-on.png" alt="1" title="bad">&nbsp;
  <img src="/assets/star-on.png" alt="2" title="poor">&nbsp;
  <img src="/assets/star-on.png" alt="3" title="regular">&nbsp;
  <img src="/assets/star-on.png" alt="4" title="good">&nbsp;
  <img src="/assets/star-on.png" alt="5" title="gorgeous">
  <input type="hidden" name="review[answer01]" id="review_answer01" value="5">
</div>
</td>

フォームタグ:

<form accept-charset="UTF-8" action="/reviews" class="simple_form new_review" enctype="multipart/form-data" id="new_review" method="post" novalidate="novalidate"></form>
4

1 に答える 1

1

HTML構造が正しくありません...見てください:

<table class='table'>
  <tbody>

  <%= simple_form_for @review, :html => { :multipart => true } do |f| %>

    <td style='width:115px; padding-top:10px;'><div id="s1"></td>
    <td><h3 style = 'padding-bottom:3px;'><%= @questions[0] %></h3></td>

    [...] (repeated for other questions)

  </tbody>
</table>

  <div style='margin-left:80px; margin-top:20px; margin-bottom:200px;' id='subbut'>
    <%= f.button :submit, "Submit Review", :class=>'btn btn-large' %>
  </div>
  <% end %>

はテーブルのform内側で始まりますが、外側で終わります。inputこれにより、ブラウザが意味を理解できないため、HTMLがすべてのsといくつかの一般的な奇妙さを含まないものとして解析されます。

ちなみに、HAMLを使用すると、そのような問題を回避できますが、それぞれに問題があります:)

于 2012-05-13T02:06:03.373 に答える