5

ユーザーモデルがあります。お気に入り

class User < ActiveRecord::Base
  attr_accessor :username :campaign_id
  attr_accessible :name, :email, :username
end

次のように1つのユーザーレコードを取得すると

u = User.first

それは戻ってきます

#<User id: 190, name: "sa", :email: "abc@gmail.com", username: "ab">

質問は次のとおりです。「name」などの 1 つの属性がattr_accessorまたはattr_accessible であるかどうかを確認する方法はありますか?

4

4 に答える 4

1

オブジェクト メソッドが attr_accessor であるかどうかは、次の方法で確認できます。

my_object.respond_to?(:name) && my_object.respond_to?(:name=)

true の戻り値は、:name に getter と setter の両方が存在することを示します。これは単なる標準の Ruby コードであり、まさに attr_accessor メソッドの定義です。

このモジュールの名前付き属性を定義します。名前は symbol.id2name で、インスタンス変数 (@name) とそれを読み取るための対応するアクセス メソッドを作成します。また、name= というメソッドを作成して、属性を設定します。

メソッドが attr_accessible かどうかは、次の方法で確認できます。

MyObject.attr_accessible[:default].deny?(:name)

ここで、MyObject はモデルのクラス名で、:name はクエリする属性です。false の戻り値は、属性がアクセス可能であることを意味します。

于 2013-09-18T10:23:06.910 に答える
0

attr_accessor属性が、データベース内の実際の列を介して作成された単なるインスタンス変数であるかどうかを知りたいと思います。経由で、モデルの db 列のリストを取得できますUser.column_names。したがって、以下のようなクラスメソッドが機能します

# User.rb

def self.column_in_db?(attrib)
   column_names.include?(attrib.to_s)
end
于 2013-09-18T07:50:30.670 に答える