2012-05-04 3 views
0

Я довольно новичок в рельсах, и я не думаю, что полностью понимаю маршрутизацию. Когда я пытаюсь получить доступ к действию редактирования я получаю следующее сообщение об ошибке:Rails Вложенные маршруты ресурсов

ActiveRecord::RecordNotFound in StoreController#show 

Couldn't find Gear with id=edit 
Rails.root: /Users/dave/rails_projects/outdoor 

Application Trace | Framework Trace | Full Trace 
app/controllers/store_controller.rb:7:in `show' 
Request 

Parameters: 

{"user_id"=>"104", 
"id"=>"edit"} 
Show session dump 

Show env dump 

Response 

Headers: 

None 

Вот мое мнение со ссылкой, которая бросает эту ошибку:

<li><%= link_to "Store Appearance", edit_user_store_path(@user) %></li> 

Вот моя вложенная маршрут:

resources :users do 
    resources :store 
    end 

Вот мой контроллер

class StoreController < ApplicationController 
    def index 
    @store = current_user.gears.paginate(page: params[:page]) 
    end 

    def show 
    @gears = Gear.find(params[:id]).user.gears.paginate(page: params[:page]) 
    end 

    def edit 
    end 

    def update 
    end 
end 

Модель магазин

class Store < ActiveRecord::Base 
    attr_accessible :storeimage, :storename 
    belongs_to :user 

    validates :user_id, :presence => true 

end 

Модель пользователя

class User < ActiveRecord::Base 

    attr_accessible :first_name, :last_name, :email, :password, :password_confirmation, :userimage, :remove_userimage 
    has_secure_password 
    has_many :gears 
    has_many :comments, :dependent => :destroy 
    has_one :store, :dependent => :destroy 
    before_save :create_remember_token 
    require 'carrierwave/orm/activerecord' 
    mount_uploader :userimage, UserpicUploader 

    email_regex = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i 

    validates :first_name, presence: true, 
          length: {:maximum => 50 } 
    validates :last_name, presence: true, 
         length: {:maximum => 50 } 
    validates :email,  presence: true, 
         format: {:with => email_regex}, 
         uniqueness: {:case_sensitive => false} 
    validates :password, presence: true, 
         confirmation: true, 
         length: {within: 6..40} 

    include Tire::Model::Search 
    include Tire::Model::Callbacks 

    def name 
    first_name + " " + last_name 
    end 

    private 

    def create_remember_token 
     self.remember_token = SecureRandom.urlsafe_base64 
    end 

end 

Пожалуйста, помогите.

ответ

1

Вам необходимо пройти оба user_id и id Params в URL, когда вы подключаетесь к store объект вложен под user, так что ваш URL должен выглядеть следующим образом:

/users/1/stores/3/edit 

Versus:

/users/1/stores/edit 

Вы также должны пройти оба этих в качестве аргументов вашего помощника пути, то есть:

edit_user_store_path(@user, @store) 
+0

ok, поэтому, если я изменил путь, чтобы включить аргумент @store. Как определить, что в контроллере заданы модели has_one и принадлежит к отношениям? – DaveG

+0

Определите, что в контроллере? – coreyward

+0

Извините, я должен был быть более ясным. Я не был уверен, как определить переменную @store. Я понял это, спасибо за вашу помощь – DaveG