Attr_accessible в рельсах Активная запись

Когда я использую attr_accessible, чтобы указать, какие поля из моей модели будут отображаться, верно ли это для script/console? Я имею в виду то, что я не указывал, поскольку attr_accessible также не будет доступен через консоль?

Ответ 1

Это справедливо только для массового присвоения. Например, если вы хотите установить attr_protected :protected в своей модели:

>> Person.new(:protected => "test")
=> #<Person protected: nil>

И наоборот, вы можете установить все доступные вам атрибуты с помощью attr_accessible.

Однако, все еще будут работать:

>> person = Person.new
=> #<Person protected: nil>
>> person.protected = "test"
=> #<Person protected: "test">

Это то же поведение, что и в контроллерах, представлениях и т.д. attr_protected защищает только от массового назначения переменных, в основном из форм и т.д.

Ответ 2

Я нашел почему:

Указывает белый список атрибутов модели, которые могут быть заданы с помощью массового присвоения, например new(attributes), update_attributes(attributes) или attributes=(attributes). Это противоположно макросу attr_protected:

 Mass-assignment will only set attributes in this list, to assign to the rest of 
attributes you can use direct writer methods. This is meant to protect sensitive  
attributes from being overwritten by malicious users tampering with URLs or forms. 
If you‘d rather start from an all-open default and restrict attributes as needed,
have a look at `attr_protected`.

Таким образом, это означает, что он просто избегает массового присвоения, но я все еще могу установить значение.

Ответ 3

Консоль ведет себя точно так же, как ваше приложение Rails. Если вы защитили некоторые атрибуты для конкретной модели, вы не сможете массово назначать эти атрибуты либо с консоли, либо из самого приложения Rails.

Ответ 4

Когда вы указываете somethings как attr_accessible, только те вещи могут быть доступны в консоли или через интерфейс веб-сайта.

например: предположим, что вы сделали name и email равным attr_accessible:

attr_accessible :name, :email

и оставить created_at и updated_at (которые вы должны). Затем вы можете редактировать или обновлять только эти поля в консоли.

Ответ 5

Если вы хотите открыть поле формы своей модели, вы можете использовать

attr_accessor :meth # for getter and setters
attr_writer :meth # for setters
attr_reader :meth # for getters

или если вы хотите добавить какое-то поведение в свой атрибут, вам придется использовать виртуальные атрибуты

def meth=(args)
 ...
end
def meth
 ...
end

приветствий.