2015-04-23 3 views
0

Я получаю эту ошибку, когда форма завершения заполнения (мнения/пользователей/show.html.erb), которые должны создавать фермы через FarmsController и UsersController:ошибка NoMethod в создании действия

NoMethodError в Farms # создать

Показываются/СМИ/ROK/локальный диск/пользователи/Koko/Документы/KMETIJE/kmetije/приложение/просмотров/пользователей/show.html.erb где линия # 42 поднял:

неопределенный метод `ферм 'для nil: NilClass

Извлеченные источник (около линии № 42):

39:   
40:   <div id="show"> 
41:    <h2>Seznam kmetij</h2> 
42:    <% unless @user.farms.empty? %> 
43:     <table id="farms"> 
44:      <tr> 
45:       <th>Ime</th> 

приложение/просмотров/пользователей/show.html.erb: 42: в _app_views_users_show_html_erb___3046909201139407898_28545460_3894795499615530291' app/controllers/farms_controller.rb:14:in создать»

Вот проблематична создать мероприятие в FarmsController:

class FarmsController < ApplicationController 

    def new 
    @farm = current_user.farms.build 
    end 

    def create 
    @farm = Farm.new(params[:farm]) 
    if @farm.save 
     redirect_to 'users/show' 
    else 
     render 'users/show' 
    end 
    end 
end 

Здесь находится UserController, который выдает th е шоу действия, которые должны показать результаты в представлении:

class UsersController < ApplicationController 

    def show 
    @user = User.find(params[:id]) 
    @farms = @user.farms.paginate(:page => params[:page]) 
    end 

end 

Это мнение, которое имеет форму, чтобы добавить фермы в (ID = «добавить»), а также должны показать созданные фермы в (ID = "шоу"):

<body> 

    <div id="add"> 
     <h2>Dodaj kmetijo</h2><br /> 
     <%= form_for(:farm, :url => farms_path) do |f| %> 
      <%= f.label :name, "Ime kmetije" %><br /> 
      <%= f.text_field :name %> 
      <%= f.label :region, "Območje" %><br /> 
      <%= f.text_field :region %> 
      <%= f.label :north, "Geografska širina" %><br /> 
      <%= f.text_field :north %> 
      <%= f.label :east, "Geografska dolžina" %><br /> 
      <%= f.text_field :east %> 
      <%= f.label :description, "Opis" %><br /> 
      <%= f.text_area :description, rows: "6" %><br /> 
      <%= f.label :categories, "Kategorije" %><br /> 
      <%= f.text_area :categories, rows: "1" %><br /> 
      <%= f.label :products, "Izdelki" %><br /> 
      <%= f.text_area :products, rows: "2" %><br /> 
      <%= f.submit "Vstavi" %> 
     <% end %> 
    </div>  

    <div id="show"> 
     <h2>Seznam kmetij</h2> 
     <% unless @user.farms.empty? %> 
      <table id="farms"> 
       <tr> 
        <th>Ime</th> 
        <th>Regija</th> 
        <th>N</th> 
        <th>E</th> 
        <th>Opis</th> 
        <th>Kategorije</th> 
        <th>Izdelki</th> 
        <th>Izbris</th> 
       </tr> 
       <tr> 
        <td><%= farm.name %></td> 
        <td><%= farm.region %></td> 
        <td><%= farm.north %></td> 
        <td><%= farm.east %></td> 
        <td><%= farm.description %></td> 
        <td><%= farm.categories %></td> 
        <td><%= farm.products %></td> 
        <td><%= link_to "delete", farm, :method => :delete, :confirm => "Izbrišem?", :title => farm.name %></td> 
       </tr> 
      </table> 
      <%= will_paginate @farms %> 
     <% end %> 
    </div> 
</body> 

Существует также связь (фермы belong_to: пользователь) в модели Farm:

class Farm < ActiveRecord::Base 
    attr_accessible :name, :region, :north, :east, :description, :categories, :products 

    belongs_to :user 

    validates :name, :presence => true 
    validates :region, :presence => true 
    validates :north, :presence => true 
    validates :east, :presence => true 
    validates :description, :presence => true 
    validates :categories, :presence => true 
    validates :products, :presence => true 
    validates :user_id, :presence => true 

    default_scope :order => 'farms.region DESC' 
end 

А также в модели пользователя:

class User < ActiveRecord::Base 
    attr_accessor :password 
    attr_accessible :name, :password, :password_confirmation 

    has_many :farms 

    validates :name, :presence => true, 
    validates :password, :presence => true, 
         :confirmation => true, 
end 

Спасибо за ваше время и силы!

+0

В Farms # create ''users/show'' нужен идентификатор пользователя в параметрах, чтобы найти' User.find (params [: id] 'by: id, в строке 42 @user в' nil' –

ответ

0

define @ user = current_user в методе создания контроллера фермы или вы можете использовать current_user вместо @user в show.html.erb.

+0

спасибо, что кажется правильным, но я все равно получаю ту же ошибку –

Смежные вопросы