2013-11-02 25 views
0

在任何人將其標記爲重複之前,我從前面的問題中被告知要用這個問題開一個新的問題。不幸的是,我最後一個問題的解決方案並不適用於這個問題。Rails不會呈現部分,即使它說它有

我的rails服務器說它已經在我的頁面中顯示了我的部分內容,但內容不存在。 即使我使用Chrome DevTools檢查頁面上的元素,應該呈現的div也不在其中。

編輯:layouts更改我所有的partials到shared,但我沒有改變這裏。

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(部分):

<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(內部分的部分):

<% 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 %> 

我的服務器日誌說部分已被渲染:

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) 

任何想法?

+0

哪兩個部分沒有渲染? – MarkoHiel

+0

鑑於渲染edit_relation部分只需要0.0ms,我沒有懷疑與case語句匹配的值。你能否在這部分內容中檢查行動的價值? – Chandranshu

+0

做部分'佈局/旁邊'和'佈局/閃光'渲染好? – amine

回答

1

我不知道這是否有幫助。但通常情況下,您不要將局部放入佈局文件夾中。嘗試製作一個新文件夾並從那裏進行渲染。

+1

感謝您的提示,我改變了(+1) –

3

這條線有問題

<% case :action %> 

action應該是一個局部變量,而不是符號。符號:actionwhen中的任何值都不匹配,所以Rails立即完成了這個部分,並且什麼也沒做。

要解決,除了將其更改爲

<% case action %> 

,有兩件事你需要提高

  1. 這不是好layouts下把部分如果不是佈局的一部分。 MarkoHiel也提到了這一點。

  2. 視圖中太多的邏輯使視圖代碼看起來非常難看。

+0

這沒有奏效。這會在用戶#拋出一個NameError#show:'undefined local variable或method'action'for#<#:0x31c1448>' –

+0

1.嘗試給別人重命名'action',這也是一個Rails方法,可能是名稱衝突。 2.嘗試註釋掉該區域中的所有代碼並加載它,而不使用局部變量。一步一步調試,你就會知道問題所在。 –

+0

我將'action'重命名爲'doaction',並且拋出了相同的錯誤。我拿出了所有的邏輯,並呈現了「Accept Request」分支,並且它表現得很好。我是否正確使用'locals',或者有更好的方法嗎? –

2

它可能表示呈現,因爲代碼執行,只是不輸出。您需要在'<%'標籤後面加上'='字符,以便正確輸出。

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

+0

這對我來說是一個巨大的錯誤,對不起。之前的一個問題已經爲我解決了這個問題,但是我在這裏複製並粘貼時忽略了反映問題的變化。解決這個問題的人告訴我發佈一個新問題。 –

相關問題