我有User
模型和Storefront
模型。
路由错误 没有路线匹配{:action =>“edit”,:controller =>“storefronts”, :id => #Storefront id:nil,name:nil,user_id:4,created_at:nil, updated_at:nil,description:nil,location:nil>}
试图解决这个问题已经有3个小时了。它昨天工作.. 为什么在“新”操作时会说:action =>“编辑”?
这是我的代码:
class Storefront < ActiveRecord::Base
attr_accessible :name, :location, :description
belongs_to :user
end
class User < ActiveRecord::Base
attr_accessible :name, :email, :password, :password_confirmation
has_secure_password
has_one :storefront
end
class StorefrontsController < ApplicationController
before_filter :check_auth, only: [:new, :edit, :update]
def index
@storefronts = Storefront.all
end
def new
@storefront = current_user.build_storefront
end
def create
@storefront = current_user.build_storefront(params[:storefront])
if @storefront.save
redirect_to edit_storefront_path(@storefront)
else
render 'new'
end
end
def show
@storefront = Storefront.find(params[:id])
end
def edit
@storefront = Storefront.find(params[:id])
end
def update
@storefront = Storefront.find(params[:id])
if @storefront.update_attributes(params[:storefront])
redirect_to @storefront
else
render 'edit'
end
end
end
Pbf::Application.routes.draw do
resources :sessions, :only => [:new, :create, :destroy]
resources :users
resources :storefronts
root :to => 'storefronts#index'
match '/signup', to: 'users#new'
match '/login', to: 'sessions#new'
match '/logout', to: 'sessions#destroy'
end
链接我正在使用(这是问题):
<% if current_user.storefront %>
<%= link_to "Manage Storefront", edit_storefront_path(current_user.storefront) %>
<% else %>
<%= link_to "Open Storefront!", openstore_path %>
<% end %>
提前致谢!
编辑:
我的rake routes
sessions POST /sessions(.:format) sessions#create new_session GET /sessions/new(.:format) sessions#new session DELETE /sessions/:id(.:format) sessions#destroy users GET /users(.:format) users#index POST /users(.:format) users#create new_user GET /users/new(.:format) users#new edit_user GET /users/:id/edit(.:format) users#edit user GET /users/:id(.:format) users#show PUT /users/:id(.:format) users#update DELETE /users/:id(.:format) users#destroy storefronts GET /storefronts(.:format) storefronts#index POST /storefronts(.:format) storefronts#create new_storefront GET /storefronts/new(.:format) storefronts#new edit_storefront GET /storefronts/:id/edit(.:format) storefronts#edit storefront GET /storefronts/:id(.:format) storefronts#show PUT /storefronts/:id(.:format) storefronts#update DELETE /storefronts/:id(.:format) storefronts#destroy
答案 0 :(得分:2)
我认为您的观点中有错误。 app/views/storefronts/new.html.erb
错误地引用edit_storefront_path
而未将storefront_id
作为参数传递。您可能需要storefronts_path
答案 1 :(得分:0)
它是new_storefronts_path
它的收集路线,如果您传递单数形式,那么如果您没有声明任何命名路线,则将其视为成员路线,
这就是为什么路由选择编辑动作,而关于id 4,你没有按照约定传递id,所以nil.object_id
是4。
答案 2 :(得分:0)
也许问题是路由器无法从某种':id'中找出'new'。尝试为编辑路线声明添加约束
get 'storefronts/:id/edit' => 'storefronts#edit', :id => /[\d]*/
然后,只有数字ID才会被解释为编辑操作的调用。