【问题标题】:Render partial not displayed渲染部分不显示
【发布时间】:2014-07-01 10:09:34
【问题描述】:

我有 Rails 应用程序,用户可以在其中 likepost,当用户单击“喜欢”链接时,“喜欢”链接将变为“不喜欢”链接(使用渲染部分),它也可以创建一个like 的记录,它的作品保存到数据库,我可以看到部分已呈现在日志上,但部分未显示在视图上,“喜欢”链接也已删除。

Started POST "/like" for 127.0.0.1 at 2014-07-01 16:45:48 +0700
  ←[1m←[35mUser Load (1.0ms)←[0m  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
Processing by HomesController#create_like as JS
  Parameters: {"utf8"=>"V", "authenticity_token"=>"kRfosGW9Qsv3e8VH8MU/X/EyLVoJ/ya8T3Abwv7qNwg=", "like"=>{"post_id"=>"4"}}
  ←[1m←[36m (0.0ms)←[0m  ←[1mBEGIN←[0m
  ←[1m←[35mSQL (1.0ms)←[0m  INSERT INTO "likes" ("created_at", "post_id", "updated_at", "user_id") VALUES ($1, $2, $3, $4) RETURNING "id"  [["created_at", Tue, 01 Jul 2014 09:45:48 UTC +00:00], ["post_id", 4], ["updated_at", Tue, 01 Jul 2014 09:45:48 UTC +00:00], ["user_id", 1]]
  ←[1m←[36mPost Load (1.0ms)←[0m  ←[1mSELECT "posts".* FROM "posts" WHERE "posts"."id" = 4 LIMIT 1←[0m
  ←[1m←[35mSQL (1.0ms)←[0m  UPDATE "posts" SET "count_like" = COALESCE("count_like", 0) + 1 WHERE "posts"."id" = 4
  ←[1m←[36m (1.0ms)←[0m  ←[1mCOMMIT←[0m
  ←[1m←[35mPost Load (1.0ms)←[0m  SELECT "posts".* FROM "posts" WHERE "posts"."id" = $1 LIMIT 1  [["id", 4]]
  Rendered homes/_like_dislike.html.erb (0.0ms)
  Rendered homes/create_like.js.erb (6.0ms)
Completed 200 OK in 42.0ms (Views: 31.0ms | ActiveRecord: 5.0ms)

当我尝试重新加载/刷新浏览器时,显示“不喜欢”链接。

还有这个_posts.html.erb 文件

<div class="perpost-content" id="<%= dom_id(post) %>">
    <div class="perpost-body"><p><%= post.body %></p></div>
    <div class="perpost-footer">
        <ul class="inline">
            <li id="like_<%= dom_id(post) %>">
                <%= render 'like_dislike', :post => post %>
            </li>
            <% if post.user_id == current_user.id %><li><%= link_to "delete", destroy_post_path(post), method: :delete, data: {confirm: "yakin akan dihapus?"}, :remote => true %></li><% end %>
        </ul>
    </div>
</div>

_like_dislike.html.erb文件

<% @base_secure = SecureRandom.urlsafe_base64 %>
<% if post.liked_by? current_user %>
    <%= link_to "dislike", destroy_like_path(post.likes.where(:user_id => current_user.id).first.id), method: :delete, data: {confirm: "yakin akan dihapus?"}, :remote => true %>
<% else %>
    <%= form_for Like.new, :url => { :action => "create_like" }, :html => {:id => "send_like_"+ @base_secure}, :remote => true do |f| %>
        <%= f.hidden_field :post_id, :value => post.id %>
        <%= link_to 'like', "#", :onclick => "$('#send_like_"+ @base_secure +"').submit()" %>
    <% end %>
<% end %>

create_like.js.erb

$('#like_<%= dom_id(@post) %>').empty().append('<%= j render :partial => "homes/like_dislike", :collection => @post, :as => :post %>');

create_likehomes_controller.rb 采取行动

def create_like
  @like = Like.new(params[:like])
  @like.user_id = current_user.id
  @like.save
  @post_id = params[:like][:post_id].to_i
  @post = Post.find(@post_id)
   respond_to do |format|
     format.js
   end  
end

【问题讨论】:

  • 您将其呈现为create_like.js 中的集合,但您只有一个对象。我不确定这是否是唯一的问题,但这可能是其中的一部分。
  • @Baloo 感谢 baloo,我已将集合更改为本地对象,看起来像这样 $('#like_&lt;%= dom_id(@post) %&gt;').empty().append('&lt;%= j render :partial =&gt; "homes/like_dislike", :locals =&gt; {:post =&gt; @post } %&gt;');,它的作品
  • 您说“当我尝试重新加载/刷新页面时,正在显示不喜欢的链接。”这是否意味着部分正在显示,但您看到的是“不喜欢”链接而不是部分中的“喜欢”链接?

标签: ruby-on-rails ruby-on-rails-3.2


【解决方案1】:

Baloo 说“你在 create_like.js 中将它渲染为一个集合,但你只有一个对象。”所以我试图改变这一点

$('#like_<%= dom_id(@post) %>').empty().append('<%= j render :partial => "homes/like_dislike", :collection => @post, :as => :post %>');

$('#like_<%= dom_id(@post) %>').empty().append('<%= j render :partial => "homes/like_dislike", :locals => {:post => @post } %>');

Action View Partials Rails 3.2.18

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-30
    • 2016-12-16
    • 2014-09-19
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 2017-05-07
    • 2017-06-01
    相关资源
    最近更新 更多