ruby-on-rails – 一对一:未定义的方法构建

遇到一对一关系的问题

我有一些比赛,我想有一个比分的比赛.

我的Match.rb

has_one :score,:dependent => :destroy

我的score.rb

belongs_to :match

我的scores_controller.rb

def new
@match = Match.find(params[:match_id])
@score = @match.score.new
end

def create
@match = Match.find(params[:match_id])
@score = @match.score.create(params[:score])
end

我的路线

resources :matches do
resources :scores
end

我的分数/ new.html.haml

= form_for([@match,@match.score.build]) do |f|
    = f.label :score1
    = f.text_field :score1
    %br
    = f.label :score2
    =f.text_field :score2
    %br
    = f.submit

我的错误,我得到

undefined method `new' for nil:NilClass

到目前为止,我还没有一对一的关系,因为我很喜欢RoR,有什么建议吗?

编辑

编辑我的代码来匹配create_score和build_score,似乎工作.但现在我有一些奇怪的行为.

在我的分数

attr_accessible :score1,:score2

但是当我尝试在我的比赛/ show.html.haml中调用

= @match.score.score1

我收到一个未知的方法调用,或者我根本看不到任何东西…但是如果我打电话

= @match.score

我得到一个得分对象返回(例如#)#

编辑2

修复问题.我在打电话

分数/ new.haml.html

= form_for([@match,@match.create_score])

需要是

= form_for([@match,@match.build_score])

一切都按预期工作.

需要进入rails控制台并获取这些对象以查看每个:score1:score2为零

解决方法

使用build而不是new:
def new
    @match = Match.find(params[:match_id])
    @score = @match.build_score
end

这是以下文档:http://guides.rubyonrails.org/association_basics.html#belongs_to-build_association

类似地,在create方法中,这样做:

def create
    @match = Match.find(params[:match_id])
    @score = @match.create_score(params[:score])
end

文件为:http://guides.rubyonrails.org/association_basics.html#belongs_to-create_association

相关文章

以下代码导致我的问题: class Foo def initialize(n=0) @n = n end attr_accessor :n d...
这是我的spec文件,当为上下文添加测试“而不是可单独更新用户余额”时,我得到以下错误. require 's...
我有一个拦截器:DevelopmentMailInterceptor和一个启动拦截器的inititializer setup_mail.rb. 但我想将...
例如,如果我有YAML文件 en: questions: new: 'New Question' other: recent: ...
我听说在RSpec中避免它,let,let !,指定,之前和主题是最佳做法. 关于让,让!之前,如果不使用这些,我该如...
我在Rails中使用MongoDB和mongo_mapper gem,项目足够大.有什么办法可以将数据从Mongoid迁移到 Postgres...