我正在嘗試使用Rails 4來構建應用程序。Rails 4 - 點擊布爾值爲false
該應用程序有3個模型 - 一個用於項目,一個用於範圍,一個用於Finalize。
Finalize屬於範圍。範圍屬於項目。 Project接受Scope(和Finalize)的嵌套屬性,Scope接受Finalize的嵌套屬性。
在我的finalize模型中,我有一個布爾屬性:draft。如果草稿爲真,那麼我希望在草稿完成時在項目展示頁面上包含一個鏈接,以將草稿切換爲假。
SO成員給了我一些在附件中的建議(我試圖遵循,但沒有服務切換布爾屬性)。
在我的項目控制,我有:
def new
#authorise @project
@project = Project.new
@project.scope = Scope.new
@project.scope.finalise = Finalise.new
end
在我的控制範圍,我有;
def new
@scope = Scope.new
@scope.finalises.build
end
以我定型控制器,我的方法(這是由另一SO用戶建議):
def toggle_draft
@finalise = Finalise.find(params[:id])
@finalise.draft = true
@finalise.save
redirect_to project_path(@project)
end
最終化路線具有:
resources :finalises do
patch '/toggle-draft', to: 'finalises#toggle_draft', as: 'toggle_draft'
end
的完成部分節目(其中包含在項目展示中)具有:
<% if @project.scope.finalise.draft == true %>
<div class="finalise"> <%= link_to 'Finalise this draft',
finalise_toggle_draft_path(:id => @finalise.id), :remote => true, method: :patch %></div>
<% end %>
當我嘗試這個,我得到一個錯誤,指出:
未定義的方法'身份證」的零:NilClass
加布裏埃爾(下)曾建議,我可能需要通過協會(所以@project鏈接。 scope.finalise.id)。我已經嘗試過這個公式和@project.scope.finalise_id。這兩者都不管用。
當我嘗試,因爲:
<% if @project.scope.finalise.draft == true %>
<div class="finalise"> <%= link_to 'Finalise this draft',
finalise_toggle_draft_path(:id => @project.scope.finalise.id), :remote => true, method: :patch %></div>
<% end %>
我得到一個錯誤,指出: 沒有路由匹配{:動作=> 「toggle_draft」:控制器=> 「定型」,:ID => 1 }缺少必需的鍵:[:finalise_id]
當我嘗試:
我得到一個錯誤,指出:
<% if @project.scope.finalise.draft == true %>
<div class="finalise"> <%= link_to 'Finalise this draft',
finalise_toggle_draft_path(:id => @project.scope.finalise.id), :action => 'toggle-draft', :remote => true, method: :patch %></div>
<% end %>
沒有路由匹配{:動作=> 「toggle_draft」:控制器=> 「定型」,:ID => 1}缺少必需的鍵:[:finalise_id]
當我嘗試:
我得到這個錯誤:
<% if @project.scope.finalise.draft == true %>
<div class="finalise"> <%= link_to 'Finalise this draft',
controller: "finalises", action: "toggle_draft",
finalise_id: @finalise_id,
:remote => true,
method: :patch %>
</div>
<% end %>
沒有路由匹配{:行動=> 「toggle_draft」:控制器=> 「定型」,:ID => 「53」,:finalise_id =>零,:方法=>:補丁}
謝謝
的link_to使用 'GET',所以你需要例如指定方法link_to「完成此草稿」,toggle_draft_path(@finalise_id),方法:: patch – margo
感謝Margo,我在link_to段的末尾添加了'method::patch',但是我仍然收到一個路由錯誤:沒有路由匹配[GET]「/ toggle-draft」 – Mel
如果您運行耙路線,您可能會看到該路線名爲finalise_toggle_draft,因此您需要在部分 – margo