gpt4 book ai didi

ruby-on-rails - 如何在 Ruby on Rails Controller 中创建第二个创建方法?

转载 作者:数据小太阳 更新时间:2023-10-29 09:01:05 24 4
gpt4 key购买 nike

我有一个 Survey 类和典型的 CRUD 方法,包括一个创建方法。我想创建第二个名为 create_pre 的创建方法,它会创建更细致的调查。

这是我的代码:

  def create #old create survey method
@survey = Survey.new(survey_params)

respond_to do |format|
if @survey.save
format.html { redirect_to(@survey, :notice => 'Survey was successfully created.') }
format.xml { render :xml => @survey, :status => :created, :location => @survey }
else
format.html { render :action => "new" }
format.xml { render :xml => @survey.errors, :status => :unprocessable_entity }
end
end
end

和新的:

  def create_pre #new create survey method
@survey = Survey.new(survey_params)

respond_to do |format|
if @survey.save
format.html { redirect_to(@survey, :notice => 'Survey was successfully created.') }
format.xml { render :xml => @survey, :status => :created, :location => @survey }
else
format.html { render :action => "new" }
format.xml { render :xml => @survey.errors, :status => :unprocessable_entity }
end
end
end

但是当我尝试从控制台使用新的时,出现错误:

 s = Survey.create_pre name: 'Levi\'s Pre survey', intervention_id: 165242, template_id: 3
NoMethodError: undefined method `create_pre' for Survey (call 'Survey.connection' to establish a connection):Class
Did you mean? create
from /home/levi/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/activerecord-4.2.4/lib/active_record/dynamic_matchers.rb:26:in `method_missing'

不知道如何解决这个问题?

当我调用创建时,会创建一个调查并将其保存在数据库中。

irb(main):022:0* s = Survey.create name: 'Levi\'s Pre survey', intervention_id: 165242, template_id: 3
SQL (5.1ms) USE [evrrprod2012]
SQL (4.1ms) BEGIN TRANSACTION
SQL (6.0ms) EXEC sp_executesql N'INSERT INTO [surveys] ([name], [intervention_id], [template_id], [created_at], [updated_at]) OUTPUT INSERTED.[id] VALUES (@0, @1, @2, @3, @4)', N'@0 nvarchar(4000), @1 int, @2 int, @3 datetime, @4 datetime', @0 = N'Levi''s Pre survey', @1 = 165242, @2 = 3, @3 = '02-25-2016 13:09:15.37', @4 = '02-25-2016 13:09:15.37' [["name", "Levi's Pre survey"], ["intervention_id", 165242], ["template_id", 3], ["created_at", Thu, 25 Feb 2016 18:09:15 UTC +00:00], ["updated_at", Thu, 25 Feb 2016 18:09:15 UTC +00:00]]
SQL (2.9ms) COMMIT TRANSACTION
=> #<Survey id: 40, template_id: 3, name: "Levi's Pre survey", created_at: "2016-02-25 18:09:15", updated_at: "2016-02-25 18:09:15", intervention_id: 165242, created_by: nil, skip_reason: nil, skipped: nil, label: nil, note: nil, parent_id: nil>

使用 create_pre 时的相同尝试失败。

最佳答案

Survey.create_pre 正在尝试调用 Survey 类的类方法,按照惯例,它是一个模型,而不是您的 Controller 。

更新

只是解决 OP 对他们问题的新评论和补充。

您添加的 Survey.create 方法与您在问题前面显示的 SurveysController#create 方法无关。

您展示的是您自己在 Controller 中定义的 Controller 实例方法,用于处理传入请求。您在控制台中调用的 Survey.create 是一个 ActiveRecord::Base 类方法,它在您的 Survey 模型中可用,因为它继承自 ActiveRecord::Base

SurveysController 中的 create 方法与您可以在控制台中调用的 Survey.create 方法无关,并且同样,您添加到 SurveysController 的新 create_pre 方法无法在 Survey 模型上调用。

关于ruby-on-rails - 如何在 Ruby on Rails Controller 中创建第二个创建方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35634149/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com