如何在Ruby on Rails控制器中创建第二个create方法?

LD

我有一个Survey类和典型的CRUD方法,包括一个create方法。我想创建另一个名为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'

不知道该如何解决?

当我打电话给create时,将创建一个调查并将其保存在数据库中。

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惯例,该方法将是模型,而不是您的控制器。

更新

只需解决新评论以及OP对其问题的补充。

Survey.create您添加的方法是什么做的SurveysController#create你先前在你的问题显示方法。

您要显示的是一个控制器实例方法,您已经在控制器中定义了自己的方法来处理传入请求。您在控制台中调用Survey.createActiveRecord::Base方法是一种Survey模型中可用类方法,因为它继承自ActiveRecord::Base

中的create方法SurveysControllerSurvey.create您可以在控制台中调用方法无关,同样,create_preSurveysController不能在Survey模型上调用已添加的新方法

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在第二个控制器中刷新数据

来自分类Dev

如何访问导航控制器中的倒数第二个ViewController?

来自分类Dev

如何快速将信息传递给第二个视图控制器中的Uilabel?

来自分类Dev

如何快速将信息传递给第二个视图控制器中的Uilabel?

来自分类Dev

如何将第二个变量从route.php传递到Laravel 5中的控制器?

来自分类Dev

JavaFX如何从第一个控制器访问第二个控制器的控件

来自分类Dev

如何将值传递给第二个视图控制器的initWithCoder?

来自分类Dev

启动第二个视图控制器后,如何关闭父视图控制器?

来自分类Dev

在应用启动时,我该如何导航,导航控制器中的第二个视图控制器?

来自分类Dev

如何在Laravel控制器中将动作处理转发到第二个动作?

来自分类Dev

如何在Laravel控制器中将动作处理转发到第二个动作?

来自分类Dev

如何推送两个视图控制器但仅为第二个视图动画过渡?

来自分类Dev

如何将标签数据传递到第二个视图控制器中的另一个标签

来自分类Dev

Angular JS:如何从控制器调用第二个服务并使用返回的对象更新DOM

来自分类Dev

如何将字符串从第二个控制器中的文本字段(嵌入在表格单元中)传递回第一个控制器中的标签(也嵌入在表格单元中)?

来自分类Dev

如何在pyqt4中正确创建第二个窗口

来自分类Dev

如何在Spring Boot应用程序中创建第二个RedisTemplate实例

来自分类Dev

如何在VUEJS中更新第二个动态创建的级联选择(下拉)

来自分类Dev

如何在 Eclipse 中打开第二个包浏览器窗口?

来自分类Dev

iOS 7:如何在一个视图控制器中将状态栏文本颜色更改为白色,在第二个视图控制器中将状态栏文本颜色更改为黑色?

来自分类Dev

如何通过选项卡栏控制器将值从第二个视图传递到第一个视图

来自分类Dev

如何在cli中访问倒数第二个命令的第二个参数?

来自分类Dev

如何在WPF的第二个屏幕中启动第二个应用程序?

来自分类Dev

如何在Ruby on Rails中传递控制器参数

来自分类Dev

如何创建jquery对象的第二个实例?

来自分类Dev

如何将第二个视图控制器文本字段值传递给第一个视图控制器数组并在 swift4 中点击按钮时关闭

来自分类Dev

如何访问第二个地图迭代器?

来自分类Dev

如何创建第二个初始屏幕(在iOS中默认的初始屏幕之后)?

来自分类Dev

家庭网络中的第二个路由器-如何正确设置

Related 相关文章

  1. 1

    如何在第二个控制器中刷新数据

  2. 2

    如何访问导航控制器中的倒数第二个ViewController?

  3. 3

    如何快速将信息传递给第二个视图控制器中的Uilabel?

  4. 4

    如何快速将信息传递给第二个视图控制器中的Uilabel?

  5. 5

    如何将第二个变量从route.php传递到Laravel 5中的控制器?

  6. 6

    JavaFX如何从第一个控制器访问第二个控制器的控件

  7. 7

    如何将值传递给第二个视图控制器的initWithCoder?

  8. 8

    启动第二个视图控制器后,如何关闭父视图控制器?

  9. 9

    在应用启动时,我该如何导航,导航控制器中的第二个视图控制器?

  10. 10

    如何在Laravel控制器中将动作处理转发到第二个动作?

  11. 11

    如何在Laravel控制器中将动作处理转发到第二个动作?

  12. 12

    如何推送两个视图控制器但仅为第二个视图动画过渡?

  13. 13

    如何将标签数据传递到第二个视图控制器中的另一个标签

  14. 14

    Angular JS:如何从控制器调用第二个服务并使用返回的对象更新DOM

  15. 15

    如何将字符串从第二个控制器中的文本字段(嵌入在表格单元中)传递回第一个控制器中的标签(也嵌入在表格单元中)?

  16. 16

    如何在pyqt4中正确创建第二个窗口

  17. 17

    如何在Spring Boot应用程序中创建第二个RedisTemplate实例

  18. 18

    如何在VUEJS中更新第二个动态创建的级联选择(下拉)

  19. 19

    如何在 Eclipse 中打开第二个包浏览器窗口?

  20. 20

    iOS 7:如何在一个视图控制器中将状态栏文本颜色更改为白色,在第二个视图控制器中将状态栏文本颜色更改为黑色?

  21. 21

    如何通过选项卡栏控制器将值从第二个视图传递到第一个视图

  22. 22

    如何在cli中访问倒数第二个命令的第二个参数?

  23. 23

    如何在WPF的第二个屏幕中启动第二个应用程序?

  24. 24

    如何在Ruby on Rails中传递控制器参数

  25. 25

    如何创建jquery对象的第二个实例?

  26. 26

    如何将第二个视图控制器文本字段值传递给第一个视图控制器数组并在 swift4 中点击按钮时关闭

  27. 27

    如何访问第二个地图迭代器?

  28. 28

    如何创建第二个初始屏幕(在iOS中默认的初始屏幕之后)?

  29. 29

    家庭网络中的第二个路由器-如何正确设置

热门标签

归档