【问题标题】:Create method problem in Ruby on Rails在 Ruby on Rails 中创建方法问题
【发布时间】:2011-05-30 06:43:07
【问题描述】:

我有一个涉及用户、论文和排名的 Rails 应用。这很简单,但我对 Rails 很陌生。我现在遇到问题的部分是排名的创建方法。

论文类has_many :rankings和排名类belongs_to :essay

在排名控制器中我有:

def create
   @ranking = @essay.rankings.build(params[:ranking])
   flash[:success] = "Ranking created!"
   redirect_to root_path
end

但我收到错误:nil:NilClass 的未定义方法“排名”

我需要每个排名都有一个essay_id,我相信build 会为我更新这个。

我以为rails给我排名方法是因为我设置的关系,为什么@essay为零?

提前致谢

【问题讨论】:

  • @essay 对象在哪里???错误在喊...“nil:NilClass 的未定义方法‘排名’”

标签: ruby-on-rails ruby-on-rails-3


【解决方案1】:

构建不保存。您应该使用new,然后使用save。我会为您提供示例代码,但您并没有真正让我们清楚地了解您正在做什么。 @essay 实例变量在定义之前就已被使用,我不确定您的应用程序如何确定排名属于哪篇文章。

您可能想给Rails Guides 一个阅读。

【讨论】:

    【解决方案2】:

    我认为这是你打算做的:

    # EssayController#new
    def new
      @essay = Essay.new(params[:essay])
      @ranking = @essay.rankings.build(params[:ranking])
      #...
     end
    

    看看nested model forms ,它应该能让你朝着正确的方向前进。

    【讨论】:

    • 我相信这个方法的上下文是他的RankingsController。他似乎想要创建一个属于现有论文的新排名。也就是说,您的代码遇到了与原始代码相同的问题:build 不保存。
    • 确实如此,我在重新阅读他的问题后意识到这一点。将编辑澄清。
    • 您编辑的解决方案似乎再次错过了机会。他正在尝试创建属于现有论文的排名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    相关资源
    最近更新 更多