簡體   English   中英

在頁面上以不同順序渲染會中斷路由

[英]Render in a different order on the page breaks the routing

我有包含雙關語的挑戰,可以對雙關語進行投票。 在“挑戰顯示”頁面上,將顯示所有雙關語並顯示其票數。 當前在視圖頁面上:

  <%= render @challenge.puns.reverse %>
  <br>
  <div id="form">
    <%= render "puns/form" %>
  </div>

我希望雙關語表單顯示在已提交的項目(雙關語)上方。 但是,如果將它們交換,像這樣:

  <div id="form">
    <%= render "puns/form" %>
  </div>
  <%= render @challenge.puns.reverse %>

我收到控制器錯誤,並且pun.id突然不可用,投票鏈接中斷。

No route matches {:action=>"upvote", :challenge_id=>"9", :controller=>"puns", :id=>nil}, missing required keys: [:id]

這是引起問題的雙關語/形式部分

<% if signed_in? %>
  <% if current_user.voted_for? pun %>
    <%= pun.votes_for.size %>
    <span class="pun_text"><%= link_to pun.pun_text, challenge_pun_path(@challenge, pun.id) %></span>
  <% else %>
    <%= link_to like_challenge_pun_path(@challenge, pun.id), method: :put do %>
      <span class="heart_like">&#10084;</span>&nbsp;<%= pun.votes_for.size %>&nbsp;
    <% end %>
      <span class="pun_text"><%= link_to pun.pun_text, challenge_pun_path(@challenge, pun.id) %></span>
  <% end %>
<% end %>

like_challenge_pun_path引發錯誤,但我不明白為什么。 我在這里再次聲明@challenge ,因此它應該能夠獲取ID。

這是雙關語的表格:

<%= form_for([@challenge, @challenge.puns.build]) do |f| %>
  <span class=".emoji-picker-container">
    <%= f.text_area :pun_text, placeholder: "Add pun", data: { emojiable: true } %>
  </span>
  <%= f.submit %>
<% end %>

另外,這是我的路線設置

  resources :challenges do
    resources :puns do
      member do
        put "like", to: "puns#upvote"
        put "dislike", to: "puns#downvote"
      end
    end
  end

以及相應的舉動

def upvote
  @pun = @challenge.puns.find(params[:id])
  @pun.upvote_by current_user
  redirect_to @challenge
end

有人可以幫忙嗎?

我認為代碼適用於雙關語集合。 我認為問題在於表單的格式如下:

@challenge.puns.build

因此,在@challenge.puns集合似乎沒有保留的記錄(沒有ID),因此無法生成該模型的路徑。

作為快速解決方案,我建議:

<%= render @challenge.puns.reverse.select(&:persisted?) %>

更新:我以為你有

<%= form_for([@challenge, @challenge.puns.build]) do |f| %>

您也可以嘗試:

<%= form_for([@challenge, Pun.new]) do |f| %>

或在控制器中解決。 但是需要查看它的控制器代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM