3

これが私が取り組んでいる構造です:

app / models / model.rb

class Model < ActiveRecord::Base
    attr_accessor :some_var
end

app / models / model_controller.rb

class ModelsController < ApplicationController
    def show
        @model = Model.find(params[:id])
        @other_var
        if @model.some_var.nil?
            @model.some_var = "some value"
            @other_var = "some value"
        else
            @other_var = @model.some_var
        end
    end
end

このコードを実行すると(たとえば、showメソッド)、if句がtrueと評価されます(たとえば、@ model.some_var == nil)。これを回避するにはどうすればよいですか?attr_accessorがどのように機能するかという私の仮定に何か問題がありますか?

4

1 に答える 1

12

attr_accessorオブジェクトのインスタンス変数のセッターとゲッターを定義する組み込みの Ruby マクロであり、ActiveRecord インスタンスを持つデータベース列とは関係ありません。例えば:

class Animal
  attr_accessor :legs
end

a = Animal.new
a.legs = 4
a.legs #=> 4

データベースに保存する場合は、移行で列を定義する必要があります。その後、ActiveRecord は自動的にアクセサ メソッドを作成し、attr_accessor宣言を削除できます (削除する必要があります)。

于 2012-10-15T22:54:09.973 に答える