简体   繁体   English

Rails不会渲染部分内容,即使它说有

[英]Rails doesn't render partial even though it says it has

Before anyone marks this as a duplicate, I was told from a previous question to open a new question with this problem. 在任何人将其标记为重复之前,有人告诉我以前的问题要针对这个问题打开一个新问题。 The solution for my last question didn't work for this problem, unfortunately. 不幸的是,我最后一个问题的解决方案不适用于此问题。

My rails server says that it has rendered my partial in my page, but the content is not there. 我的rails服务器说它已经在页面中呈现了我的部分内容,但是内容不存在。 Even when I inspect the elements on the page using Chrome DevTools, the div that is supposed to be rendered isn't there. 即使当我使用Chrome DevTools检查页面上的元素时,也不存在应该呈现的div。

EDIT: Changed all my partials to shared from layouts , anthough i haven't changed that here. 编辑:虽然layouts还没有更改,但我的所有部分都从layouts更改为shared

show.html.erb (with fix): show.html.erb (已修复):

<% provide(:title, @user.name) %>
<% provide(:pagetitle, @user.name) %>

<%= render'layouts/relation' unless current_user?(@user)%>

<div id="stats">
    Player Statistics will appear here.
</div>

<div id="characters">
    Player Characters will appear here.
</div>

_relation.html.erb (the partial): _relation.html.erb (部分):

<div id="relation">
    <% if current_user.friends?(@user) %>
        <%= render 'layouts/edit_relation', locals: { action: "rm-friend" } %>
    <% elsif current_user.req_friends?(@user) %>
        Friend Request Pending...
    <% elsif current_user.pend_friends?(@user) %>
        <%= render 'layouts/edit_relation', locals: { action: "add-friend" } %>
        <%= render 'layouts/edit_relation', locals: { action: "rej-friend" } %>
    <% else %>
        <%= render 'layouts/edit_relation', locals: { action: "req-friend" } %>
    <% end %>
</div>

_edit_relation.html.erb (the partial within the partial): _edit_relation.html.erb (部分内的部分):

<% case :action %>
    <% when "req-friend"%>
        <%= form_for(current_user.relation.build(character: @user.id, type: "freq"), remote: true) do |f| %>
            <div><%= f.hidden_field :character %></div>
            <div><%= f.hidden_field :type %></div>
            <%= f.submit "Add Friend", class: "btn btn-large btn-primary" %>
        <% end %>

    <% when "add-friend"%>
        <%= form_for(current_user.relation.build(character: @user.id, type: "friend"), remote: true) do |f| %>
            <div><%= f.hidden_field :character %></div>
            <div><%= f.hidden_field :type %></div>
            <%= f.submit "Accept Request", class: "submit" %>
        <% end %>

    <% when "rej-friend" %>
        <%= form_for(current_user.reverse_relation.find_by(owner: @user.id, type: "freq"), html: { method: :delete }, remote: true) do |f| %>
            <%= f.submit "Reject Request", class: "submit" %>
        <% end %>

    <% when "rm-friend"%>
        <%= form_for(current_user.reverse_relation.find_by(owner: @user.id, type: "friend"), html: { method: :delete }, remote: true) do |f| %>
            <%= f.submit "Remove Friend", class: "submit" %>
        <% end %>

<% end %>

My server log that says that the partial has been rendered: 我的服务器日志显示部分已渲染:

Started GET "/melv" for 127.0.0.1 at 2013-11-01 21:22:21 +0000
Processing by UsersController#show as HTML
  Parameters: {"name"=>"melv"}
  User Load (1.0ms)  SELECT "users".* FROM "users" WHERE "users"."remember_token
" = '35599bfa491cb6b5e10f164c0191d51cd773f173' LIMIT 1
  User Load (1.0ms)  SELECT "users".* FROM "users" WHERE "users"."name" = 'melv'
 LIMIT 1
  Relation Load (1.0ms)  SELECT "relations".* FROM "relations" WHERE "relations"
."owner" = $1 AND "relations"."character" = 1 AND "relations"."type" = 'friend'
LIMIT 1  [["owner", 2]]
  Relation Load (0.0ms)  SELECT "relations".* FROM "relations" WHERE "relations"
."owner" = $1 AND "relations"."character" = 1 AND "relations"."type" = 'freq' LI
MIT 1  [["owner", 2]]
  Relation Load (1.0ms)  SELECT "relations".* FROM "relations" WHERE "relations"
."owner" = $1 AND "relations"."character" = 2 AND "relations"."type" = 'freq' LI
MIT 1  [["owner", 1]]
  Rendered layouts/_edit_relation.html.erb (0.0ms)
  Rendered layouts/_relation.html.erb (14.0ms)
  Rendered users/show.html.erb within layouts/application (23.0ms)
  Rendered layouts/_shim.html.erb (0.0ms)
  Rendered layouts/_header.html.erb (1.0ms)
  Relation Load (1.0ms)  SELECT "relations".* FROM "relations" WHERE "relations"
."owner" = 1 LIMIT 1
  Rendered layouts/_aside.html.erb (4.0ms)
  Rendered layouts/_flash.html.erb (0.0ms)
Completed 200 OK in 299ms (Views: 290.0ms | ActiveRecord: 5.0ms)

Any ideas? 有任何想法吗?

This line has problem 这条线有问题

<% case :action %>

action is supposed to be a local variable, not symbol. action应该是局部变量,而不是符号。 The symbol :action doesn't match any of the values in when , so Rails went through this partial in no time and did nothing. 符号:actionwhen中的任何值都不匹配,因此Rails会立即进行此部分操作并且不执行任何操作。

To fix, change it to 要修复,请将其更改为

<% case action %>

Beside, there are two more things you need to improve 除此之外,还有两点需要改进

  1. It's not good to put partial under layouts if it is not part of layout. 如果部分layouts不属于layouts则将其放置在layouts下方是不好的。 MarkoHiel also mentioned that. MarkoHiel也提到了这一点。

  2. Too much logic in view makes the view code looks very ugly. 视图中的逻辑过多会使视图代码看起来非常难看。

It probably said rendered because the code is executed, just not output. 它可能表示渲染是因为执行了代码,只是没有输出。 You need to put an '=' character after the '<%' tag so it will properly output. 您需要在'<%'标记后放置'='字符,以便正确输出。

<%= render'layouts/relation' unless current_user?(@user) %>

I don't know if that helps. 我不知道这有没有帮助。 But normally you don't put partials into the layouts folder. 但通常您不会将局部文件放入布局文件夹中。 Try making a new folder and render it from there. 尝试制作一个新文件夹并从那里渲染它。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM