我的form_for就是這樣開始的。form_for無法編輯/更新和顯示/新的一起工作?
<%= form_for([@memberlisting.membercontact, @memberlisting], url: backend_membercontact_memberlistings_path) do |f| %>
我在編輯/更新時遇到了路由錯誤的問題。
No route matches [PATCH] "/backend/membercontacts/1/memberlistings"
通過另一個問題出現了與方法修復:修補加backend_membercontact_memberlisting(S)_path除去S和我可以更新的東西。
<%= form_for([@memberlisting.membercontact, @memberlisting], url: backend_membercontact_memberlisting_path, method: :patch) do |f| %>
現在顯示/新的錯誤發生在以前沒有的地方。
No route matches {:action=>"show", :controller=>"backend/memberlistings", :membercontact_id=>"1"} missing required keys: [:id]
我覺得把法補丁,結束時造成上述錯誤的,但我怎樣才能既顯示/新+編輯/更新工作?
一些額外的信息
的routes.rb
# Application Client Backend
namespace :backend do
# Member Routes
resources :membercontacts do
resources :memberaddresses
resources :memberlistings
end
end
後端/ memberlisting.rb
class Backend::Memberlisting < ActiveRecord::Base
# Model Relationships
belongs_to :membercontact
end
後端/ membercontact.rb
class Backend::Membercontact < ActiveRecord::Base
# Model Relationship
has_many :memberlistings, dependent: :destroy
end
後端/ memberlistings_co ntroller.rb
class Backend::MemberlistingsController < ApplicationController
# Security & Action Filters
layout '/backend/application.html.erb'
before_action :set_memberlisting, only: [:show, :edit, :update, :destroy]
# Member Listing Index
def index
membercontact = Backend::Membercontact.find(params[:membercontact_id])
@memberlistings = membercontact.memberlistings.order('mlcontactname ASC')
end
# Detailed Member Listing Profile
def show
membercontact = Backend::Membercontact.find(params[:membercontact_id])
@membercontact = membercontact.memberlistings.find(params[:id])
end
# New Member Listing
def new
membercontact = Backend::Membercontact.find(params[:membercontact_id])
@memberlisting = membercontact.memberlistings.build
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @membercontact }
end
end
# Edit Member Listing
def edit
membercontact = Backend::Membercontact.find(params[:membercontact_id])
@memberlisting = membercontact.memberlistings.find(params[:id])
end
# Create Member Listing Action
def create
@membercontact = Backend::Membercontact.find(params[:membercontact_id])
@memberlisting = @membercontact.memberlistings.create(memberlisting_params)
respond_to do |format|
if @memberlisting.save
format.html { redirect_to backend_membercontact_memberlistings_path, notice: 'Address for Membercontact was Successfully Created.' }
format.json { render action: 'show', status: :created, location: @memberlisting }
else
format.html { render action: 'new' }
format.json { render json: @memberlisting.errors, status: :unprocessable_entity }
end
end
end
# Update Member Listing Action
def update
respond_to do |format|
if @memberlisting.update(memberlisting_params)
format.html { redirect_to backend_membercontact_memberlistings_path, notice: 'Address for Membercontact was Successfully Updated.' }
format.json { head :no_content }
else
format.html { render action: 'edit' }
format.json { render json: @memberlisting.errors, status: :unprocessable_entity }
end
end
end
# Delete Member Listing Action
def destroy
@membercontact = Backend::Membercontact.find(params[:membercontact_id])
@memberlisting = @membercontact.memberlistings.find(params[:id])
@memberlisting.destroy
respond_to do |format|
format.html { redirect_to backend_membercontact_memberlistings_path, notice: 'Address for Membercontact was Successfully Deleted.' }
format.json { head :no_content }
end
end
private
def set_memberlisting
@memberlisting = Backend::Memberlisting.find(params[:id])
end
def memberlisting_params
params.require(:backend_memberlisting).permit(:mlcontactname, :mlcompanyname, :mladdressline1, :mladdressline2, :mlcity, :mlprovince, :mlpostalcode, :mlphone, :mlwebsite, :mlemail, :membercontact_id, :account_id)
end
end
路線耙
backend_membercontact_memberlistings_path GET /backend/membercontacts/:membercontact_id/memberlistings(.:format) backend/memberlistings#index
POST /backend/membercontacts/:membercontact_id/memberlistings(.:format) backend/memberlistings#create
new_backend_membercontact_memberlisting_path GET /backend/membercontacts/:membercontact_id/memberlistings/new(.:format) backend/memberlistings#new
edit_backend_membercontact_memberlisting_path GET /backend/membercontacts/:membercontact_id/memberlistings/:id/edit(.:format) backend/memberlistings#edit
backend_membercontact_memberlisting_path GET /backend/membercontacts/:membercontact_id/memberlistings/:id(.:format) backend/memberlistings#show
PATCH /backend/membercontacts/:membercontact_id/memberlistings/:id(.:format) backend/memberlistings#update
PUT /backend/membercontacts/:membercontact_id/memberlistings/:id(.:format) backend/memberlistings#update
DELETE /backend/membercontacts/:membercontact_id/memberlistings/:id(.:format) backend/memberlistings#destroy
我喜歡把一切都嵌套事情是這樣的。我無法弄清楚爲什麼crud功能會給我帶來麻煩,如果我拿出補丁方法,它不會更新,但是當我將補丁方法放入它時,不會創建新的或顯示缺少id的b/c記錄。
謝謝。我想上次它一直在努力尋找。 backend_membercontact_backend_memberlistings雖然我會試一試。 – bradpotts
嗯,riiiight。我想我現在想起來這件事有點毛。如果內存服務,我不得不在調用和新頁面中調用一個單獨的form_for,然後將表單元素包含爲部分。 –
你認爲在路由文件中有一種方法可以從嵌套資源中刪除命名空間嗎?我可能也只是做範圍模塊:因爲我有一個更容易的時間。 – bradpotts