加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – form_for undefined方法`model_name’for :: A

发布时间:2020-12-17 04:01:47 所属栏目:百科 来源:网络整理
导读:我一直有使用form_for渲染的问题.我想要一个_form.html.erb部分来处理我的问题记录的创建和编辑.当我走下去使用的路线 %= form_for(@problem) do |f| % 我收到以下错误: undefined method `model_name' for Problem::ActiveRecord_Relation:Class 在我的rou
我一直有使用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

我也有问题控制器

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上呈现表单吗?

任何帮助或方向将非常感谢.

解决方法

大声笑为什么我之前没有看到这个?

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

是的,这完全是问题所在.原因在这里:

Problem::ActiveRecord_Relation:Class

您将获得一个关系对象(定义一个集合,而不是单个记录).这是由于:

#controller
def index
   @problem = Problem.all
end

错误是beacuse form_for需要一条记录.您需要在控制器和放大器中使用它.它会工作:

#controller
def index
   @problem = Problem.new
   @problems = Problem.all
end

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读