1

私はモデルを持っています:

class HelloRails < ActiveRecord::Base
  attr_accessible :filename, :filevalidate
  include In4systemsModelCommon

  validates :filename, presence: true

  def update
      parameters = [self.filename, @current_user]
      parameters.map!{|p| ActiveRecord::Base.connection.quote p}
      sql = "call stored_procedure(#{parameters.join(',')})"
      ActiveRecord::Base.connection.execute(sql)
  end
end

ビューにはtext_fieldas と呼ばれるものがあり:filenameます。送信ボタンをクリックすると、モデルでこの更新メソッドが呼び出され、ストアド プロシージャが呼び出されて実行されます。現在、検証は機能していません。

nilファイル名を受け入れたくありません。これどうやってするの?

4

1 に答える 1

1

SQLを直接実行しているため、検証されません:

ActiveRecord::Base.connection.execute(sql)

save検証は、 や などの「通常の」ActiveRecord メソッドを使用する場合にのみ実行されますupdate_attributes。検証を手動で実行するvalid?には、オブジェクトを呼び出すことができます。

モデル:

def update
  return false unless self.valid? # validation failed: return false
  parameters = [self.filename, @current_user]
  parameters.map!{|p| ActiveRecord::Base.connection.quote p}
  sql = "call stored_procedure(#{parameters.join(',')})"
  ActiveRecord::Base.connection.execute(sql)
  true
end

@object.update次に、コントローラーで、必要に応じて、戻り値をチェックするtruefalse、ビューにエラーを表示する必要があります。

コントローラ:

# This is just an example. I don't know your code.
def update
  @object = HelloRails.find(params[:id])

  if @object.update
    redirect_to somewhere
  else
    render :action => 'edit'
  end
end
于 2012-09-21T11:41:07.053 に答える