我的团队中的NoMethodError#Show

时间:2015-11-01 20:02:39

标签: ruby-on-rails forms partial-views nomethoderror

出于某种原因,我在这一行上收到错误。一切似乎都是正确的。

undefined method `datetime' for #<Game:0x87e73f0> 

控制台日志的屏幕截图: www.gyazo.com/0947c493218a3fecdb5849e1e13f181a

app / views / games / _form.html.erb第4行引发

<%= f.text_field :datetime %>

迁移文件:

class CreateGames < ActiveRecord::Migration
  def change
    create_table :games do |t|
      t.string :datetime
      t.string :location
      t.references :team, index: true

      t.timestamps null: false
    end
  end
end

部分表格:

<%= form_for([@team, @team.games.build]) do |f| %>
    <p>
        <%= f.label :datetime %><br>
        <%= f.text_field :datetime %>
    </p>

    <p>
        <%= f.label :location %><br>
        <%= f.text_field :location %>
    </p>

    <br>

    <p>
        <%= f.submit %>
    </p>
<% end %>

路由文件:

Rails.application.routes.draw do

  devise_for :users
  resources :teams do
    resources :members
  end

  resources :teams do
    resources :games
  end

  root "teams#index"
end

2 个答案:

答案 0 :(得分:0)

您错误拼写了列名称将datetime更改为date_time:

<%= form_for([@team, @team.games.build]) do |f| %>
    <p>
        <%= f.label :date_time %><br>
        <%= f.text_field :date_time %>
    </p>

    <p>
        <%= f.label :location %><br>
        <%= f.text_field :location %>
    </p>

    <br>

    <p>
        <%= f.submit %>
    </p>
<% end %>

答案 1 :(得分:-1)

我不喜欢你称之为专栏&#34; datetime&#34; - 如果它没有受到保护,它肯定会产生误导性(考虑到大多数SQL风格都有datetime列类型)。

除了显示您正在调用错误的列名:

Game.column_names I got: => ["id", "date_time", "location", "team_id", "created_at", "updated_at"]

您需要参考date_time

 <%= f.label :date_time %><br>
 <%= f.text_field :date_time %>

...您可以更好地更改数据库中属性的名称:

$ rails g migration ChangeDateTime

#db/migrate/change_date_time____.rb
class ChangeDateTime < ActiveRecord::Migration
   def change
     rename_column :games, :date_time, :start_time
   end
end

$ rake db:migrate

这将允许您引用start_time,并且不应以任何方式与您的SQL安装冲突。