1

私はpostモデルを持っていhas_many :commentsます。コメントごとに(_comment.html.erb部分的に生成された)、コメントに星を付けることができるように小さな星のアイコンがあります。

ユーザーが星をクリックしたときにモーダル フォーム (ブートストラップ) を開きたい。

モーダルの作成方法を知っています。しかし、そのコードを_commentパーシャルに入れると、コメントごとにレンダリングされます。

javascript を使用せずに各コメントのモーダル ウィンドウを開く方法はありますか (または、それが唯一の方法である可能性があります)。

_コメント:

<div id="comment-#{comment.id}>
<%= comment.content %>
<a href="#starModal" id="star"  data-toggle="modal"><i class="icon-star"> </i></a>
</div>

  <div id="starModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="starLabel" aria-hidden="true">
      <div class="modal-header">
          <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
            <h3 style="text-align: center;">Star Me!</h3>
      </div>
      <div id="starpop">
        <%= render :partial => 'layouts/star_form' , :locals => {:comment => comment,:post => post} %>
      </div>
    </div>

投稿/show.html.erb

<div class="post">

<%= @post.body %>

<% @post.comments.each do |c| %>
<%= render :partial=>'comment', :locals=>{:comment => c, :post => @post} %>
<% end %>

</div>

そのモーダルコードを正しいアプローチにするか、DRY 方法で改善することができます (また、ユーザーにとって重くありません (投稿にはページに何百ものコメントがあると想像してください..各コメントには、モデルのためだけにそのデータの 2 倍があることを想像してください) ?) ?

4

1 に答える 1

2

まだ作成していない場合は、少なくとも「新規」アクションと「作成」アクションを使用して、スター用の独自のリソースを作成してみませんか。次に、モーダルは、スター ボタンの ajax onclick を介してロードされる新しいアクションになります。

<%= link_to "<img src='...' />".html_safe, new_star_path, remote: true %>

starcontroller の新しいアクションで:

...
respond_to do |format|
  format.js
end
...

次に、new.js.erb を作成します。

$("#place_for_modal").html("<%= escape_javascript(render 'new') %>");
$('#starModal').modal('show')

modal-div を _new.html.erb パーシャルにします。

于 2012-12-17T13:45:14.850 に答える