Rails 未定义方法

2023-12-23

我一直在尝试让我的第一个 Rails 代码运行一段时间,但我似乎仍然无法让它运行。我最近的问题是我不断收到以下错误

“MessageController#create 中没有方法错误”。

我发现我正在尝试为某些变量传递 nil,如下一行所示

"undefined method `message' for #<Message mess: nil, user: nil>"

但是,正如我在错误屏幕底部看到的那样,我的参数传递正确。我的代码如下。任何帮助表示赞赏。

控制器

class MessageController < ApplicationController
  def new
    @message = Message.new
  end

  def create
    @message = Message.new(user_params)
    @message.mess=params[:mess]
    @message.user=params[:user]
    if @message.save
        redirect_to "http://itworks.com"
    else
        redirect_to "http://myspace.com"
    end
  end

private
  def user_params
    params.require(:message).permit(:mess, :user)
  end
end

View

<%= form_for @message, url: {action: "create"}, html: {class: "nifty_form"} do |f| %>

    <%= f.text_field :mess %><br />

    <%= f.text_field :user %><br />
    <%= f.submit "Create" %>
<% end %>

参数强

首先,您需要阅读Strong Parameters http://edgeapi.rubyonrails.org/classes/ActionController/StrongParameters.html

使用 Rails 4,为了防止批量分配,您需要使用私有方法创建新的 ActiveRecord 对象来分配您需要的参数值:

#app/controllers/messages_controller.rb
Class MessagesController < ApplicationController
   def create
      @message = Message.new(message_params)
      @message.save
   end

   private

   def message_params #-> you can call this method what you like :)
       params.require(:message).permit(:mess, :user)
   end
end

这将从参数哈希中设置 ActiveRecord 对象的参数:

params {
    "message" => { 
        "mess" => "value",
        "user" => "value"
    }
}

This should按原样通过您的表格;但是,如果你开始使用类似的东西form_tag http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-form_tag,你最终会没有messageparam,从而阻止强 params 方法正常工作。

--

Form

您的表格可以简化:

<%= form_for @message, html: {class: "nifty_form"} do |f| %>

如果您填充form_for使用 ActiveRecord 对象 http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for-label-%23form_for+with+a+model+object,Rails 会自动为你提取路径;这对您的错误并不重要,因为您的表单正在将请求发送到create无论如何都要行动

--

Method

The no method error派生自对不存在或不支持该方法的对象调用方法(毫不奇怪)。

关于调试这个问题,你基本上需要寻找你可能在哪里调用.message在物体上。这通常在视图或其他东西中(如果不在控制器中)

仅参考.message处于strong params你有的方法,我建议尝试这个:

 def create
    @message = Message.new(user_params)
    if @message.save
        redirect_to "http://itworks.com"
    else
        redirect_to "http://myspace.com"
 end

这将使行动变得常规,这应该给它最好的发挥作用的机会。

--

协会

您可能遇到的另一个问题是您的 ActiveRecord 关联Message模型。 ActiveRecord 关联在模型中定义,使您的对象能够附加关联数据

你遇到的错误could来自这样的事情:

#app/models/message.rb
Class Message < ActiveRecord::Base
    belongs_to :message #-> won't work
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails 未定义方法 的相关文章

  • 如何在 Rails 6 中禁用 TurboLinks?

    所以我面临这个问题 我的服务器实际上从客户端的请求中检索了正确的数据 并将这些数据发送到浏览器 我可以清楚地看到它可用于浏览器 CTRL SHIFT C gt Network gt my request 但是 浏览器不会刷新 所以我现在看到
  • 如何使用 ruby​​ 的循环和 haml 创建表?

    我正在尝试制作一个如下所示的 html 表 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 我的数据结构是这样的 f ary 1 250 这是我的哈姆尔代码 table border gt 1 tbody tr cnt 0 f
  • Ruby:在 Ubuntu 上安装 rmagick

    我正在尝试在 Ubuntu 10 04 上安装 RMagick 看起来here https stackoverflow com questions 1482823 is there an easy way to install rmagic
  • 如何跳过 Devise SessionsController 的 before_filter ?

    我有一个before filter in my ApplicationController 也就是说 对于我的项目中的每个控制器 我怎么能够skip before filter对于设计的SessionsController创造行动 这是我的
  • 如何让 Sinatra 通过 HTTPS/SSL 工作?

    正如标题所示 谷歌没有提供任何与此相关的有用信息 如何为 Sinatra 应用程序设置和配置 HTTPS SSL 如何创建 HTTPS 路由 我以前从未在我的应用程序中使用过 HTTPS 也没有调整 Rack 其他内容的经验 所以我很欣赏详
  • 如何在rails中使用npm包?

    我正在尝试使用王牌编辑 https github com ajaxorg ace在我的 Ruby on Rails 应用程序中 大部分视图由 React 组件组成 我正在使用反应轨道宝石 https github com reactjs r
  • Ruby on Rails content_for 会自动进行 HTML 转义吗?

    使用 Rails 3 0 6 我发现在视图中 如果我执行 content for food name Macaroni Cheese 然后当我使用它回来时content for food name 那么 将被制作成 amp 已经 如果我做一
  • 无需别名的 Ruby YAML 编写

    我正在从 ruby 将数据写入 yaml 文件 并且经常在该文件上添加别名 像 id001 somekey somevalue id001 就我而言 我使用 yaml 文件来aid可读性并将名称添加到文件中的值 因为现有数据只是 没有键的分
  • Rails:关于产量

    我在a中看到了一些代码导轨 v2 3 app In layout car general html erb 这个视图是由 cars controller 中的方法调用的 我看到了代码 var some car new Object 有两个问
  • Rails Searchkick / Elasticsearch has_many 和belongs_to 关联

    我尝试使用 Searchkick 运行搜索并基于多个模型返回 我的书本模型包含这个 class Book lt ActiveRecord Base searchkick has many book subjects has many sub
  • 在任意时间范围内找到最佳日/月/年间隔的算法?

    如果您有时间表 请说 March 19 2009 July 15 2011 是否有一种算法可以将该时间范围分解为 March 19 2009 March 31 2009 complete days April 1 2009 December
  • 如何创建与 ActiveResource 对象的 ActiveRecord 关系?

    假设我正在为一家已经拥有 People 应用程序的出版公司编写一个图书馆应用程序 所以在我的图书馆应用程序中我有 class Person lt ActiveResource Base self site http api people m
  • kaminari ajax 分页不更新分页

    我正在使用 kaminari gem 在 Rails3 中实现分页 我一直在关注github上的这段代码https github com amatsuda kaminari example commits ajax https github
  • 如何编写一个在安装 RubyGem 时调用的钩子?

    我想编写一个 Ruby 片段 当我的 Gem 首次安装时运行 sudo gem install mygem 能做到吗 看起来并没有真正支持 我发现了一个 post install message 属性 您应该能够在 gem 规范中设置该属性
  • Ruby mp3 Id3 解析

    目前我正在从事一个音乐项目 处理用户 mp3 上传 问题是我找不到适用于所有文件的 id3 库 我努力了id3 ruby and Mp3Info库 但它们都没有给我一致正确的结果 例如 最常见的问题 错误的流参数 比特率和采样率 有时是持续
  • 在特定页面上执行 javascript 的正确“Rails”方式

    我试图在特定页面上运行 javascript 而我唯一的解决方案似乎是反模式 我有controller js内部生成的assets javascripts 我在用着gem jquery turbolinks 我的代码类似于以下内容 docu
  • ||= 是什么意思? [复制]

    这个问题在这里已经有答案了 我的应用程序控制器中有一个受保护的方法 def current user current user User find by id session user id end 我想知道什么 方法 我一直在努力寻找和找
  • 将 ruby​​ 类转换为模块比使用改进更好的方法?

    Module refine http ruby doc org core 2 0 0 Module html method i refine方法接受一个类和一个块并返回一个细化模块 所以我想我可以定义 class Class def inc
  • 有没有可以在 HTML 文档之间进行比较的 ruby​​ gem?

    事实证明 对两个不同的 html 文档进行比较是一个完全不同的问题 而不仅仅是对纯文本进行比较 例如 如果我在以下之间进行简单的 LCS 差异 Google and Google diff 结果不是 but a gt github com
  • 如何在服务调用后检查 rspec 中的数组更改?

    目标很简单 例如我们有一个数组 name ghost state rejected name donkey state rejected 运行服务调用后UpdateAllUsers 这会将所有用户更改为 accepted name ghos

随机推荐