Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 课程中的命名错误#编辑未定义的方法`模型名称';_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 4 课程中的命名错误#编辑未定义的方法`模型名称';

Ruby on rails 4 课程中的命名错误#编辑未定义的方法`模型名称';,ruby-on-rails-4,Ruby On Rails 4,我需要帮助解决以下问题。我一直在研究类似的问题,但仍然无法找到解决问题的方法。我现在有这个问题 课程中的命名错误#编辑 类的未定义方法“model_name”:0xb5068474 错误似乎与这行代码有关 <%= simple_fields_for @lesson do |f| %> <%= f.input :lesson_name %> <%end%> 课程数据库链接到课程数据库,其中课程有许多课程,课程属于课程。我认

我需要帮助解决以下问题。我一直在研究类似的问题,但仍然无法找到解决问题的方法。我现在有这个问题

课程中的命名错误#编辑

类的未定义方法“model_name”:0xb5068474

错误似乎与这行代码有关

<%= simple_fields_for @lesson  do |f| %>
                <%= f.input :lesson_name %>
<%end%>

课程数据库链接到课程数据库,其中课程有许多课程,课程属于课程。我认为问题可能是由于我的控制器代码。我比较新,不太确定如何着手解决这个问题

我可以进入“创建”页面来创建该关系,但数据库中只保存了课程id和课程id。然而,当我进入课程的编辑页面时,这个错误会弹出

课程\u controller.rb

class CoursesController < ApplicationController
  before_action :set_course, only: [:show, :edit, :update, :destroy]
  before_action :authenticate_user!, :except => [:show,:index]
  # GET /courses
  # GET /courses.json
  def index
    @courses = Course.all
  end

  # GET /courses/1
  # GET /courses/1.json
  def show
  end

  # GET /courses/new
  def new
    @course = Course.new
    @lesson = @course.lessons.build
  end

  # GET /courses/1/edit
  def edit
     @course = Course.find(params[:id])
     @lesson = @course.lessons
  end

  # POST /courses
  # POST /courses.json
  def create
    @course = Course.new(course_params)
    @course.lessons.new(lesson_params)
    respond_to do |format|
      if @course.save
        format.html { redirect_to @course, notice: 'Course was successfully created.' }
        format.json { render action: 'show', status: :created, location: @course }
      else
        format.html { render action: 'new' }
        format.json { render json: @course.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /courses/1
  # PATCH/PUT /courses/1.json
  def update
    respond_to do |format|
      if @course.update(course_params)
        @course.lesson.update_attributes(lesson_params)
        @course.staff_ids=params[:course][:staff_ids]
        format.html { redirect_to @course, notice: 'Course was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: 'edit' }
        format.json { render json: @course.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /courses/1
  # DELETE /courses/1.json
  def destroy
    @course.destroy
    respond_to do |format|
      format.html { redirect_to courses_url }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_course
      @course = Course.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def course_params
      params.require(:course).permit(:course_code, :course_name, :year_of_study,  :discipline, :Acad_unit, :cohort_size, :remark)
    end

    def lesson_params
      params.require(:lesson).permit(:lesson_type, :lesson_name, :num_lesson, :frequency)
    end
end
class Lesson < ActiveRecord::Base
  belongs_to :course
end
class Course < ActiveRecord::Base
  validates_presence_of :course_code, :course_name
  validates_uniqueness_of :course_code, :course_name
  validates :year_of_study, :Acad_unit, :cohort_size, :numericality => { :greater_than => 0}
  has_and_belongs_to_many :staffs, join_table: :scheduleCourse
  has_many :lessons, dependent: :destroy
end
class CoursesController[:show,:index]
#获得/课程
#GET/courses.json
def索引
@当然
结束
#获取/courses/1
#GET/courses/1.json
def秀
结束
#获取/课程/新
def新
@course=course.new
@lesson=@course.lessons.build
结束
#获取/课程/1/编辑
定义编辑
@course=course.find(参数[:id])
@lesson=@course.lessons
结束
#职位/课程
#POST/courses.json
def创建
@课程=课程。新建(课程参数)
@课程。课程。新课程(课程参数)
回应待办事项|格式|
如果@course.save
format.html{将_重定向到@course,注意:'课程已成功创建。}
format.json{呈现操作:“显示”,状态::已创建,位置:@course}
其他的
format.html{呈现操作:'new'}
format.json{render json:@course.errors,status::unprocessable_entity}
结束
结束
结束
#补丁/放置/课程/1
#PATCH/PUT/courses/1.json
def更新
回应待办事项|格式|
如果@course.update(课程参数)
@课程.课程.更新课程属性(课程参数)
@course.staff\u id=params[:course][:staff\u id]
format.html{将_重定向到@course,注意:'课程已成功更新。}
format.json{head:no_content}
其他的
format.html{呈现操作:“编辑”}
format.json{render json:@course.errors,status::unprocessable_entity}
结束
结束
结束
#删除/courses/1
#删除/courses/1.json
def销毁
@当然,毁灭
回应待办事项|格式|
format.html{redirect_to courses_url}
format.json{head:no_content}
结束
结束
私有的
#使用回调在操作之间共享公共设置或约束。
设定航向
@course=course.find(参数[:id])
结束
#永远不要相信来自恐怖网络的参数,只允许白名单通过。
def课程参数
参数要求(:课程)。许可证(:课程代码,:课程名称,:学习年份,:学科,:学术单位,:队列大小,:备注)
结束
def参数
参数require(:lessource).permit(:lessource\u type,:lessource\u name,:num\u lessource,:frequency)
结束
结束
lesson.rb

class CoursesController < ApplicationController
  before_action :set_course, only: [:show, :edit, :update, :destroy]
  before_action :authenticate_user!, :except => [:show,:index]
  # GET /courses
  # GET /courses.json
  def index
    @courses = Course.all
  end

  # GET /courses/1
  # GET /courses/1.json
  def show
  end

  # GET /courses/new
  def new
    @course = Course.new
    @lesson = @course.lessons.build
  end

  # GET /courses/1/edit
  def edit
     @course = Course.find(params[:id])
     @lesson = @course.lessons
  end

  # POST /courses
  # POST /courses.json
  def create
    @course = Course.new(course_params)
    @course.lessons.new(lesson_params)
    respond_to do |format|
      if @course.save
        format.html { redirect_to @course, notice: 'Course was successfully created.' }
        format.json { render action: 'show', status: :created, location: @course }
      else
        format.html { render action: 'new' }
        format.json { render json: @course.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /courses/1
  # PATCH/PUT /courses/1.json
  def update
    respond_to do |format|
      if @course.update(course_params)
        @course.lesson.update_attributes(lesson_params)
        @course.staff_ids=params[:course][:staff_ids]
        format.html { redirect_to @course, notice: 'Course was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: 'edit' }
        format.json { render json: @course.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /courses/1
  # DELETE /courses/1.json
  def destroy
    @course.destroy
    respond_to do |format|
      format.html { redirect_to courses_url }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_course
      @course = Course.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def course_params
      params.require(:course).permit(:course_code, :course_name, :year_of_study,  :discipline, :Acad_unit, :cohort_size, :remark)
    end

    def lesson_params
      params.require(:lesson).permit(:lesson_type, :lesson_name, :num_lesson, :frequency)
    end
end
class Lesson < ActiveRecord::Base
  belongs_to :course
end
class Course < ActiveRecord::Base
  validates_presence_of :course_code, :course_name
  validates_uniqueness_of :course_code, :course_name
  validates :year_of_study, :Acad_unit, :cohort_size, :numericality => { :greater_than => 0}
  has_and_belongs_to_many :staffs, join_table: :scheduleCourse
  has_many :lessons, dependent: :destroy
end
课程
课程.rb

class CoursesController < ApplicationController
  before_action :set_course, only: [:show, :edit, :update, :destroy]
  before_action :authenticate_user!, :except => [:show,:index]
  # GET /courses
  # GET /courses.json
  def index
    @courses = Course.all
  end

  # GET /courses/1
  # GET /courses/1.json
  def show
  end

  # GET /courses/new
  def new
    @course = Course.new
    @lesson = @course.lessons.build
  end

  # GET /courses/1/edit
  def edit
     @course = Course.find(params[:id])
     @lesson = @course.lessons
  end

  # POST /courses
  # POST /courses.json
  def create
    @course = Course.new(course_params)
    @course.lessons.new(lesson_params)
    respond_to do |format|
      if @course.save
        format.html { redirect_to @course, notice: 'Course was successfully created.' }
        format.json { render action: 'show', status: :created, location: @course }
      else
        format.html { render action: 'new' }
        format.json { render json: @course.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /courses/1
  # PATCH/PUT /courses/1.json
  def update
    respond_to do |format|
      if @course.update(course_params)
        @course.lesson.update_attributes(lesson_params)
        @course.staff_ids=params[:course][:staff_ids]
        format.html { redirect_to @course, notice: 'Course was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: 'edit' }
        format.json { render json: @course.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /courses/1
  # DELETE /courses/1.json
  def destroy
    @course.destroy
    respond_to do |format|
      format.html { redirect_to courses_url }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_course
      @course = Course.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def course_params
      params.require(:course).permit(:course_code, :course_name, :year_of_study,  :discipline, :Acad_unit, :cohort_size, :remark)
    end

    def lesson_params
      params.require(:lesson).permit(:lesson_type, :lesson_name, :num_lesson, :frequency)
    end
end
class Lesson < ActiveRecord::Base
  belongs_to :course
end
class Course < ActiveRecord::Base
  validates_presence_of :course_code, :course_name
  validates_uniqueness_of :course_code, :course_name
  validates :year_of_study, :Acad_unit, :cohort_size, :numericality => { :greater_than => 0}
  has_and_belongs_to_many :staffs, join_table: :scheduleCourse
  has_many :lessons, dependent: :destroy
end
课程{:大于=>0}
拥有和属于多个:员工,加入表格::scheduleCourse
有很多:教训,依赖::破坏
结束

请给我一些建议。提前感谢您收到的错误:

undefined method `model_name` for #Class:0xb5068474
这意味着
方法的
simple\u fields\u正在执行类似
@lesson.class.model\u name
的操作,当您传递的对象(
@lesson
)是ActiveRecord::Base的实例时,这是正常的,但在
编辑
操作中定义
@lesson

@lesson = @course.lessons
作为一个关系,它不是一个
Lesson
实例,而是用于存储关系的内部ActiveRecord对象。例如,如果您首先调用它的

@lesson = @course.lessons.first

这应该行得通。或者,您可以在课程集合中进行迭代,以便为每个课程创建表单,具体取决于您想做什么。

请提供课程和课程模型代码添加课程和课程模型代码我想在创建课程时一次创建几节课。我试着改变@lesson=@course.lesson而不是lessons,但它不起作用。首先,我尝试使用@lesson=@course.lessons,但它也不起作用:X这可能是因为你的课程中没有任何内容。尝试
@course.lessons。在控制器中构建
,并在视图中查看
。查看嵌套表单手册,这就是您想要做的。我创建了3个字段,供用户在创建课程时输入3个不同的课程。每个人都在使用。这仍然是使用。当然,创建是一个表单,所以它被认为是一个嵌套表单?你必须为课程创建嵌套表单。在控制器中执行
3.times{@course.lessons.build}
,并在视图中执行`