我是rails的新手,我收到了这个错误:
SELECT p.name
FROM PARENTS p
JOIN Parents_Kids pk ON pk.ParentID=p.ParentID
JOIN Kids k ON k.KidID=pk.KidID
group by p.name
having count(case when k.name like '%mike%' then 1 end) = 0
我已经在下面发布了我的文件,请记住我对rails很新,所以我们非常感谢您的简单解释!
Route.rb:
undefined method `posts_path' for #<#<Class:0x007fe3547d97d8>:0x007fe3546d58f0>
post_controller.rb:
Rails.application.routes.draw do
get '/post' => 'post#index'
get '/post/new' => 'post#new'
post 'post' => 'post#create'
end
new.html.erb:
class PostController < ApplicationController
def index
@post = Post.all
end
def new
@post = Post.new
end
def create
@post = Post.new(post_params)
if @post.save
redirect_to '/post'
else
render 'new'
end
end
private
def post_params
params.require(:post).permit(:content).permit(:title)
end
end
答案 0 :(得分:5)
我猜form_for(@post)
期望有一个名为posts_path
的方法,其中一个方法不存在,因为它尚未在您的路径文件中定义。尝试更换:
Rails.application.routes.draw do
get '/post' => 'post#index'
get '/post/new' => 'post#new'
post 'post' => 'post#create'
end
带
Rails.application.routes.draw do
resources :posts, only: [:new, :create, :index]
end
编辑:更多信息:
阅读http://guides.rubyonrails.org/form_helpers.html表单助手的完整页面,特别是阅读“2.2将表单绑定到对象”部分以及部分说明:
在处理RESTful资源时,可以获得对form_for的调用 如果您依赖记录识别,则会更加容易。简而言之, 你可以传递模型实例并让Rails找出模型 姓名和其他人:
## Creating a new article # long-style: form_for(@article, url: articles_path) # same thing, short-style (record identification gets used): form_for(@article) ## Editing an existing article # long-style: form_for(@article, url: article_path(@article), html: {method: "patch"}) # short-style: form_for(@article)
注意短格式form_for调用是如何方便的 同样,无论记录是新的还是现有的。记录 识别是足够聪明的,以确定记录是否是新的 问record.new_record?它还会选择要提交的正确路径 to和基于对象类的名称。
所以,无论有意还是无意,当你说form_for(@post)
时,你会根据你的@post
变量的名称来猜测应该提交表单的路线。您定义的路线与预期的路线不匹配。
有关路由路由的更多信息,请阅读http://guides.rubyonrails.org/routing.html处的整个页面,并特别注意“2资源路由:Rails默认值”部分。您的form_for(@post)
将假设您正在使用“资源路由”,这是我切换到的。
至于为什么会出现新错误?您的应用程序中的其他位置您希望使用以前的自定义路径,现在您正在使用rails“资源路径”,因此您的路径名称将不同。没有路线匹配[GET]“/ post / new”因为现在路线改为匹配没有路线匹配[GET]“/ posts / new”(注意复数帖子)。
答案 1 :(得分:0)
此处表单尝试通过路径&#34; posts_path&#34;找到到post_method的路由。 所以你需要在routes.rb文件中定义。
Rails.application.routes.draw do
get '/post' => 'post#index'
get '/post/new' => 'post#new'
post '/posts' => 'post#create'
end
答案 2 :(得分:0)
问题出在视图上。 Rails无法识别提交表单时将要运行的路径。
您可以手动更改form_for标记以指向适当的URL。
<%= form_for @post, :url => "enter_your_path_here" do |f| %>
这解决了我类似的问题
答案 3 :(得分:0)
您需要将后控制器和相应的文件重命名为复数。那是帖子而不是帖子。然后路线也必须是资源:帖子。
别忘了将您的Post Controller的类名更改为复数。