2015-06-21 48 views
0

我想在Rails 4中制作应用程序。Rails 4&Controller动作

我有三个模型 - Project,Scope和Finalize。

的关联是:

项目有一个范围 范围属于项目,他有一个敲定 敲定属于范围

范围接受嵌套属性来最终确定。

在最终确定,我有一个名为属性:草案(布尔),并称为属性:finalised_at(日期时间)

我试着写它可以让我把一个链接上的任何项目,创建了一个功能:草案保存为真。该链接旨在将草稿切换为false,然后在已完成的项目上显示发布日期(:finalised_at)。

我收到一个错误,它阻止了我创建一个测试项目。错误是:未定义的局部变量或方法`create_a_finalise' - 引用我的项目控制器中的创建操作。我认为这与我的scope.rb模型中的create_a_finalise方法有关。我不知道如何解决这个问题。

我finalise.rb有:

after_validation :set_publish_time 
    def set_publish_time 
    self.finalised_at = Time.now unless self.draft 
    end 

我scope.rb有:

after_create :create_a_finalise 
    def create_a_finalise_dynamic(boolean) 
    self.finalise.create draft: boolean 
    end 

我finalise_controller有:

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 

我project_controller的问题的部分有:

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 

任何人都可以看到我需要做什么才能创建一个新项目。我的项目控制器中的创建操作有问题。

谢谢

回答

0

你是指create_a_finalise但它被命名为create_a_finalise_dynamic

after_create :create_a_finalise 
    def create_a_finalise_dynamic 

更改方法的名称

def create_a_finalise 

和不用输入这些参数。

+0

嗨克洛伊,我试过,但随后它与方法的错误:未定义的局部变量或方法'布尔”为#<范围:0x0000010dad0ee0> – Mel

+0

那么你也必须从'#create'中删除参数! 'self.finalise.create draft:boolean'。将其设置为像“true”这样的硬编码值。 – Chloe

+0

我没有任何东西在我的最终控制器中为此创建操作。不明白你的意思 – Mel

0

给出如下一个试戴

# scope.rb 

after_create :create_a_finalise 
def create_a_finalise(val) 
    self.create_finalise(draft: val) 
end 
相关问题