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 的方式改进(而且对用户来说也不重(想象帖子在一个页面中有数百条评论......所以对于每个评论来说,它的数据只有一个模型的两倍) ?) ?

4

1 回答 1

2

如果您还没有创建自己的明星资源,至少有一个“新”和“创建”操作,如何?然后你的模态将是通过 ajax onclick 加载的新动作。

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

在你的 starscontroller 新动作中:

...
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 回答