将视图中的代码带入Rails中的弹出窗口

时间:2013-03-14 06:32:17

标签: ruby ruby-on-rails-3 facebox

我希望在点击链接时将我的视图html中的代码带入弹出窗口 Ruby on Rails有可能吗?我已经有弹出工作但我想知道代码只显示评论:

<div class = "comments"><% if post.comments.exists? %>
  <% post.comments.each do |comment| %>
  <%= image_tag("http://www.gravatar.com/someavatarlink %) <!-- Retrieves Gravatar -->
    <%= link_to comment.user.name, comment.user %>
            <span class="timestamp"><%= time_ago_in_words(comment.created_at) %> ago</span>
    <span class="content2"><%= comment.comment_content %></span>
    <% end %>
<% end %></div>

添加了对_comment_form.html.erb的Ajax调用

 <%= link_to "Link", comment, :remote => true %>
      Comments
    <% end %></div></div> 
    <div id ="modal" class = "comments"><% if post.comments.exists? %>
      <% post.comments.each do |comment| %>
      <%= link_to comment.user.name, comment.user %>
                <span class="timestamp"><%= time_ago_in_words(comment.created_at) %> ago</span>
        <span class="content2"><%= comment.comment_content %></span>
        <% end %>
    <% end %></div>

在评论控制器中添加了def show

class CommentsController < ApplicationController
     def new
    @post = post.new(params[:post])
    end

def show
  @comment = Comment.find(params[:id])
  respond_to do |format|
    format.js
  end

   def create
    @post = post.find(params[:micropost_id])
    @comment = Comment.new(params[:comment])
    @comment.post = @post
    @comment.user = current_user
    if @comment.save
       redirect_to(:back)
    else
      render 'shared/_comment_form'
    end
  end
end

创建show.erb.js并将其放入“评论”和“共享”文件夹

$("#popup").html('<%= escape_javascript(render "comments") %>');

然后最后写了我的部分,这是在comments / _comment.html.erb

<% if post.comments.exists? %>
  <% post.comments.each do |comment| %>

    <%= link_to comment.user.name, comment.user %>
            <span class="timestamp"><%= time_ago_in_words(comment.created_at) %> ago</span>
    <span class="content2"><%= comment.comment_content %></span>
    <% end %>
<% end %>

1 个答案:

答案 0 :(得分:4)

<强> 1。 Ajax调用

要检索数据,请使用Ajax调用。

<%= link_to "Link", comment, :remote => true %>

Rails将评估这些请求并首先查找.js视图(如果不存在,将使用.html)。

确保控制器接受对.js的请求,如

def show
  @comment = Comment.find(params[:id])
  respond_to do |format|
    format.js
  end
end

<强> 2。写js视图

在评论中添加show.erb.js视图。这是一个带有ERB评估的JavaScript文件。 在这个模板中使用你的js弹出代码并告诉它用你的html代码填充一个div,如下所示:

$("#popup").html('<%= escape_javascript(render @comment) %>');

这将呈现评论。我们唯一需要的是部分渲染评论的html。

第3。为html写部分

在弹出窗口中为要包含的视图部分写一个部分。然后可以在普通的html视图或js视图中使用它。要使其与上面的代码一起使用,请将其命名为_comment.html.erb

要了解有关部分内容的更多信息,请在此处查看指南:
http://guides.rubyonrails.org/layouts_and_rendering.html#using-partials