2015-02-01 3 views
0

Я использую Rails 3.2 и Ruby, 4. Когда я просматриваю к http://localhost:3000/account/new я получаю сообщение об ошибке:Rails маршрутизации, NoMethodError

NoMethodError in Accounts#new 
Showing D:/row/dev/basic/app/views/accounts/_form_account.html.erb where line #1 raised: 
undefined method `accounts_path' for #<#<Class:0x42c8040>:0x6daa960> 
Extracted source (around line #1): 
1: <%= form_for(@account) do |f| %> 
2: 
3: <div> 
4: <%= f.label :username %><br> 

Я создал взгляды данные с помощью rails generate controller Controllernames index show new edit delete. Я также побежал rails generate model account. В соответствии с курсом онлайн Rails, который я следую за этим, следует создать в routes.rb:

Редактировать: Я использовал rails generate model accounts, поэтому с s в конце.

resources :accounts 
    get 'accounts/:id/delete' => 'accounts#delete', :as => :accounts_delete 

Однако, это не было создано на route.rb. Мой routes.rb после некоторого редактирования является:

Basismysql::Application.routes.draw do 

    # Public pages 
    get '/page1' => 'pages#page1' 
    get '/page2' => 'pages#page2' 
    get '/page3' => 'pages#page3' 

    get "/account/index" => 'accounts#index' 
    get "/account/show" => 'accounts#show' 
    get "/account/new" => 'accounts#new' 
    get "/account/edit" => 'accounts#edit' 
    get "/account/delete" => 'accounts#delete' 
    get 'account/:id/delete' => 'accounts#delete', :as => :accounts_delete 

    devise_for :users 
    root :to => 'pages#index' 
end 

new.html.erb является:

<div class="container"> 
    <h1>Accounts#new</h1> 
    <p>Find me in app/views/accounts/new.html.erb</p> 
</div> 

<div class="container"> 
    <%= render "form_account" %> 
</div> 

И _form_account.html.erb является:

<%= form_for(@account) do |f| %> 

    <div> 
    <%= f.label :username %><br> 
    <%= f.text_field :username %> 
    </div> 
    <div> 
    <%= f.label :firstname %><br> 
    <%= f.text_field :firstname %> 
    </div> 
    <div> 
    <%= f.label :lastname %><br> 
    <%= f.text_field :lastname %> 
    </div> 
    <div> 
    <%= f.label :organisation %> 
    <%= f.text_field :organisation %> 
    </div> 

    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

Часть контроллера счета является:

def new 
    @account = Account.new 
    end 

    def create 
    @account = Account.new(account_params) 
    if @account.save 
     redirect_to(:action => 'index') 
    else 
     render('new') 
    end 
    end 

private 
    def account_params 
    params.require(:account).permit(:username, :firstname, :lastname, :organisation) 
end 

ответ

-1

В дополнение к:

resources :accounts 

вы, вероятно, необходимо:

resource :account 

Вы начали его путем добавления маршрутов по частям в файл маршрутов, но некоторые из них должны быть PUT s или POST s или s DELETE , resource :account - это простой способ сделать это (правильно).

+0

Спасибо '' 'resources: accounts''' работал. Я предполагаю, что вы упоминали «' resource: account''', потому что я написал '' 'rails generate model account'''.Это действительно был тип моего вопроса, я действительно использовал '' 'rails generate model accounts''' – Nick

+0

@ Ник вам следует использовать уникальную« учетную запись »в создании модели, и соответствующие маршруты для этой модели' account' будут «ресурсами: accounts'. Вам вообще не нужен 'resource: account'. –

1
get "/account/index" => 'accounts#index' 
get "/account/show" => 'accounts#show' 
get "/account/new" => 'accounts#new' 
get "/account/edit" => 'accounts#edit' 
get "/account/delete" => 'accounts#delete' 
get 'account/:id/delete' => 'accounts#delete', :as => :accounts_delete 

Это не так, как вы должны создавать маршруты, все они безымянный (кроме последнего), не успокоительное и все get, замените это

resources :accounts 

и ваша ошибка будет ушел

0

Это работает

rails generate controller accounts index show new edit destroy 

Примечание: вы должны использовать счета и не учитывают при генерировании контроллеру

rails generate model account 

Примечание: вы должны зарегистрироваться в качестве особой

в routes.rb

map.resources :accounts /or 
resources :accounts 

в зависимости от версии рельсов

+0

Спасибо, рельсы генерировать учетную запись модели была опечаткой. Я действительно использовал рельсы для создания учетных записей моделей – Nick