2012-03-05 62 views
1

我在保存之前使用过滤器设置实例的主键。before_filter在创建之前设置主键

这里是我的控制器方法:

class ReferencesController < ApplicationController 

before_filter :set_primary_key, :only => [:create_sub_reference] 

    def create_sub_reference  
    @reference = Reference.new(params[:reference]) 
    respond_to do |format| 
    if @reference.save 
     format.js 
    else 
     flash[:notice] = "Reference failed to save." 
    end 
    end 
    end 


    private 

    def set_primary_key 
    result = ActiveRecord::Base.connection.execute('SELECT REF_ID FROM SEQUENCES') 
    inc_result = (result.fetch_row.first) 
    self.REF_ID = inc_result 
    end 

    end 

end 

我收到的时候我对“Save按钮”点击日志文件中的以下错误消息:

NoMethodError (undefined method `REF_ID=' for #<ReferencesController:0xb69f4ca8>): 

感谢您的任何建议这件事

+0

这里'自我'引用的控制器不是@reference你的意思。 – 2012-03-05 12:12:28

+0

我甚至尝试将'self.REF_ID'改为'@ reference.REF_ID',但徒劳无功。我仍然收到相同的错误消息 – Kim 2012-03-05 12:17:00

回答

1

你试图在你的控制器上设置REF_ID属性 - 我认为它是一个数据库列 - 而不是你的模型。每当网络请求ReferencesController到达您的应用时,该代码都会被调用。

也许您想将逻辑移至References模型中的before_create挂钩?

+0

感谢您的建议。我的方法名称是'create_sub_reference',我如何使用before_create这个特定的方法。据我所知,before_create只适用于名为'create'的方法 – Kim 2012-03-05 12:13:30

+1

只有当它定义的模型的对象在新建时被保存时,才会在写入数据库之前调用before_create'。它确实总是在模型实例的“创建”之前执行。 – Chowlett 2012-03-05 12:19:42

+0

谢谢,我现在明白了 – Kim 2012-03-05 12:25:36