gpt4 book ai didi

ruby-on-rails - 用于::ActiveRecord_Relation:Class 的 form_for 未定义方法 `model_name'

转载 作者:行者123 更新时间:2023-12-04 05:48:26 24 4
gpt4 key购买 nike

我在 form_for 渲染方面遇到了问题。我想要一个 _form.html.erb 部分来处理我的问题记录的创建和编辑。当我沿着使用路线走时

<%= form_for(@problem) do |f| %>

我收到以下错误:
undefined method `model_name' for Problem::ActiveRecord_Relation:Class

在我的 routes.rb 中,我有以下内容:
PW::Application.routes.draw do
root to: 'problems#index', via: :get
resources :problems do
member do
post 'up_vote'
post 'down_vote'
end
end

我在问题 Controller 中也有这个
class ProblemsController < ApplicationController
include Concerns::Votes

def new
@problem = Problem.new
end

def index
@problem = Problem.all
end

def show
@problem = find_problem
end

def create
@problem = current_user.problems.new(problem_params)
@problem.save
redirect_to @problem
end


private

def find_problem
@problem = Problem.find(params[:id])
end

def problem_params
params.require(:problem).permit(:name, :description, :url)
end
end

如果我指定以下内容,我可以让它工作:
<%= form_for @problem.new, url: {action: "create"} do |f| %>

但是,如果我必须为编辑制作单独的部分,我觉得这是在重复我自己。我真的不知道为什么这不想工作。难道是我在 index.html.erb 上渲染表单?

任何帮助或指导将不胜感激。

最佳答案

LOL 为什么我没有早点看到这个?

Could it be I am rendering the form on index.html.erb?



是的,这完全是问题所在。原因在这里:
Problem::ActiveRecord_Relation:Class

您将收到 relation对象(定义一个集合,而不是单个记录)。这是由以下原因引起的:
#controller
def index
@problem = Problem.all
end

错误是因为 form_for期望一个记录。你需要在你的 Controller 中使用它,它会起作用:
#controller
def index
@problem = Problem.new
@problems = Problem.all
end

#view
<%= @problems.each do |problem| %>
<%= problem.name %>
<% end %>

<%= form_for @problem do |f| %>

关于ruby-on-rails - 用于::ActiveRecord_Relation:Class 的 form_for 未定义方法 `model_name',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23336550/

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