如何使用 simple_form 解决未定义方法 `to_key' 错误

How to solve undefined method `to_key' error with simple_form

尝试使用 simple_form 时,我 运行 遇到以下错误:

undefined method `to_key' for #<CourseQuery::ActiveRecord_Relation:0x007f070689bae8>

这是相关的控制器:

class Students::DashboardController < ApplicationController
  before_filter :authenticate_student!

  def index
    @course_query=CourseQuery.all
  end

  def show
  end

  def course_queries_details
    @course_queries = current_student.course_queries
    @course_query = CourseQuery.new
  end
end

观点,views/students/dashboard/course_queries_details.html.erb:

<%= simple_form_for (@course_query) do |m| %>
  <div class="modal-body">
    <%= m.input :message ,label: false %>
  </div>
<% end %>

config/routes.rb:

namespace :students do
  root to: "dashboard#show"
  get 'course-queries-details', to: 'dashboard#course_queries_details'
  resources :students
end

谁能告诉我如何解决这个错误?

使用 ActiveRecord 时,all 方法返回所谓的关系,即多个数据库记录的集合。

使用simple_form_for构建表单时,只能传入单个数据库记录,不能传入整个关系。 simple_form 对传入 simple_form_for 的任何内容调用 to_key,因为它假定它是单个记录。

我不确定你的意图,但你可以试试这个解决方案,它构建了一个表单,用户可以在其中进行全新的课程查询:

<%= simple_form_for(CourseQuery.new) do |m| %>
  <div class="modal-body">
    <%= m.input :message ,label: false %>
  </div>
<% end %>

您似乎需要自定义表单 url。你必须这样做:

route.rb

您必须创建新的 post 方法来保存您的表单。我尝试这条路线使用 Rails 3:

namespace :students do
  root to: "dashboard#show"
  get 'course-queries-details', to: 'dashboard#course_queries_details'
  post 'save-course-queries-details', as: 'save_course_queries_details', to: 'dashboard#save_course_queries_details'
  resources :students
end

然后你必须创建新的方法来保存你的表单

<%= simple_form_for @course_query, :url => students_save_course_queries_details_path, :method => :post %>

这是文章 how to custom simple_form_for url