- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
过去 5 个小时我一直在尝试解决这个错误,如果我不能解决这个问题,我会烧掉我的电脑。
#<#:0x007f859d605250> 的未定义方法 `pushes_path' 这是我收到的错误代码,但我不明白为什么。
这是我在交互中的 index.html.erb 文件
<%= simple_form_for @push do |f| %>
<%= f.input :payload, as: :text %>
<%= f.input :segment, as: :radio_buttons %>
<%= submit_tag "start the campaign" %>
<% end %>
这是我的交互 Controller
class InteractionController < ApplicationController
def index
@push =Push.new
end
end
Push 是我在数据库中的表,我将获取输入并将它们写入数据库以供以后使用。
这是我的路由文件
devise_for :partners
get 'home/index'
get 'segmentation/index'
get 'interaction/index'
root to: "home#index"
我真的不知道它为什么要寻找 pushes_path,我做错了什么?
最佳答案
form_for
你的问题是你的 form_for
方法将尝试根据您的 @path
对象生成路由。因此,如果您没有为其创建路径,您将收到您遇到的错误:
:url
- The URL the form is to be submitted to. This may be represented in the same way as values passed to url_for or link_to. So for example you may use a named route directly. When the model is represented by a string or symbol, as in the example above, if the :url option is not specified, by default the form will be sent back to the current url (We will describe below an alternative resource-oriented usage of form_for in which the URL does not need to be specified explicitly).
底线是 Rails 是 object orientated ,它建立在这样的假设之上,即您将设置路由来处理单个对象的创建。
每次您使用 form_for
时,Rails 都会尝试从您的 object
构造您的路由——因此如果您尝试执行以下操作,它将处理路由为 photo_path
等:
#app/views/pushes/new.html.erb
<%= form_for @push do |f| %>
...
<% end %>
--
修复
正如 @mandeep
所建议的,您可以采用多种修复方法来使其正常工作:
首先,您可以为您的push
对象创建一个路由:
#config/routes.rb
resources :pushes
其次,当您使用不同的 Controller 时,您需要执行以下操作:
#config/routes.rb
resources :interactions
#app/views/pushes/new.html.erb
<%= form_for @push, url: interaction_path do |f| %>
...
<% end %>
这会将您的表单提交路由到 interactions
Controller ,而不是您默认获得的 pushes
Controller !
对象
创建基于 Rails 的后端时需要考虑的是 object-orientated框架的性质。
由于构建于 Ruby 之上,Rails 以对象
为中心——变量 的一个术语,它基本上包含的不仅仅是一段数据。就 Rails 而言,对象旨在为应用程序提供:
一旦理解了这一点,Rails 的所有功能就会一目了然。诀窍是要意识到您在 Rails 中所做的一切都应该绑定(bind)到一个对象。这也适用于 Controller :
--
有没有想过为什么要在路由中为 Controller 调用 resources
指令?这是因为您正在创建一组 resourceful routes基于它:
你知道它是如何面向对象的吗?
这使您能够为特定 Controller 等定义路由。需要注意的最重要的事情是这将如何使您能够确定您的请求应该去往哪些路由/ Controller 操作
--
像您一样使用 Controller 设置没有任何问题 - 最重要的是确保您能够定义自定义 URL 参数,以适应非基于对象的结构
关于ruby-on-rails - #<#<Class :0x007f85a15c6c90> 的未定义方法 `pushes_path',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25380238/
我是一名优秀的程序员,十分优秀!