【问题标题】:NoMethodError in my Teams#Show我的团队中的 NoMethodError#Show
【发布时间】:2015-11-01 20:02:38
【问题描述】:

由于某种原因,我在此行出现错误。一切似乎都是正确的。

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

【问题讨论】:

  • 向我们显示您看到错误的服务器日志。它将帮助我们帮助您
  • 您在创建迁移后做了rake db:migrate 吗?
  • @ArupRakshit for Game.column_names 我得到了:=> ["id", "date_time", "location", "team_id", "created_at", "updated_at"]
  • @matanco 对于 Game.first 我得到:SELECT "game".* FROM "games" ORDER BY "games"。 "id" ASC LIMIT 1 => 无
  • 所以你必须使用 date_time 而不是 datetime 。不确定,在创建实际表时,您的迁移给定名称如何更改。 :)

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


【解决方案1】:

您将列名拼错了 将日期时间更改为日期时间:

<%= 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 %>

【讨论】:

  • 您为什么建议更改字段名称?有什么具体原因吗?
  • 阅读 cmets:这是列名的输出:“id”、“date_time”、“location”、“team_id”、“created_at”、“updated_at”] 所以他有错字!
  • 谢谢,成功了!!我忘了我之前给它起什么名字了。
  • 您是否在此问题@user3808788 中手动输入了您的迁移文件? datetime怎么样?
  • @matanco 仅供参考,您知道如何更改数据库中列的名称吗?
【解决方案2】:

我不喜欢您将列称为“日期时间”的想法 - 如果它没有受到保护,那肯定会产生误导(考虑到大多数 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 安装有任何冲突。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-05
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多