Ruby on rails 铁路4号及;控制器动作

Ruby on rails 铁路4号及;控制器动作,ruby-on-rails,Ruby On Rails,我正在尝试在Rails 4中制作一个应用程序 我有三个模型-项目、范围和最终确定 这些协会是: 项目有一个范围 范围属于项目,有一个最终定稿 最终确定属于范围 作用域接受Finalize的嵌套属性 在finalize中,我有一个名为:draft(boolean)的属性和一个名为:finalized_at(datetime)的属性 我试图编写一个函数,让我在任何项目上添加一个链接:draft保存为true。该链接旨在将:draft切换为false,然后显示已完成项目的发布日期(:finalized

我正在尝试在Rails 4中制作一个应用程序

我有三个模型-项目、范围和最终确定

这些协会是:

项目有一个范围 范围属于项目,有一个最终定稿 最终确定属于范围

作用域接受Finalize的嵌套属性

在finalize中,我有一个名为:draft(boolean)的属性和一个名为:finalized_at(datetime)的属性

我试图编写一个函数,让我在任何项目上添加一个链接:draft保存为true。该链接旨在将:draft切换为false,然后显示已完成项目的发布日期(:finalized_at)

我收到一个错误,它阻止我创建一个测试项目。错误是:未定义的局部变量或方法“create_a_finalize”,用于-引用my project controller中的创建操作。我认为这与scope.rb模型中的create_a_finalize方法有关。我不知道怎么解决这个问题

My Finalize.rb有:

  after_validation :set_publish_time
  def set_publish_time
    self.finalised_at = Time.now  unless self.draft
  end
My scope.rb具有:

after_create :create_a_finalise
  def create_a_finalise_dynamic(boolean)
    self.finalise.create draft: boolean
  end
我的Finalize_控制器具有:

def toggle_draft
    @finalise = Finalise.find(params[:finalise_id])
    @finalise.draft = false

    if @finalise.save
      redirect_to project_path(@finalise.scope.project), notice: 'Successfully Updated'
    else
      redirect_to project_path(@finalise.scope.project), alert: 'Not Updated'
    end
  end
def create
    #authorise @project
    @project = Project.new(project_params)
    @project.creator_id = current_user.id
    @project.users << current_user
    respond_to do |format|
      if @project.save
        format.html { redirect_to @project }
        format.json { render action: 'show', status: :created, location: @project }
      else
        format.html { render action: 'new' }
        format.json { render json: @project.errors, status: :unprocessable_entity }
      end
    end
  end
我的项目控制器有问题的部分有:

def toggle_draft
    @finalise = Finalise.find(params[:finalise_id])
    @finalise.draft = false

    if @finalise.save
      redirect_to project_path(@finalise.scope.project), notice: 'Successfully Updated'
    else
      redirect_to project_path(@finalise.scope.project), alert: 'Not Updated'
    end
  end
def create
    #authorise @project
    @project = Project.new(project_params)
    @project.creator_id = current_user.id
    @project.users << current_user
    respond_to do |format|
      if @project.save
        format.html { redirect_to @project }
        format.json { render action: 'show', status: :created, location: @project }
      else
        format.html { render action: 'new' }
        format.json { render json: @project.errors, status: :unprocessable_entity }
      end
    end
  end
def创建
#授权@项目
@项目=项目。新建(项目参数)
@project.creator\u id=当前用户id

@project.users您指的是
create\u a\u finalize
,但它的名称是
create\u finalize\u dynamic

after_create :create_a_finalise
  def create_a_finalise_dynamic
将方法的名称更改为

  def create_a_finalise

然后停止争论。

尝试以下内容-

# scope.rb

after_create :create_a_finalise
def create_a_finalise(val)
  self.create_finalise(draft: val)
end

嗨,克洛伊,我试过了,但是它的方法有一个错误:未定义的局部变量或方法“boolean”for#你还必须从
#create
中删除参数<代码>self.finalize.create草稿:布尔值
。将其设置为硬编码值,如
true
。我的Finalize controller中没有为此创建操作的任何内容。不知道你的意思