2015-06-19 2 views
3

Есть ли способ переопределить один атрибут, но по-прежнему использовать сильные параметры в Rails? Например, в следующем примере, если я хотел бы каждый раз переопределять имя пользователя, но также использовать метод person_params. Должен быть лучший способ, чем вручную установить @person.name, правильно?Переопределить один атрибут в сильных параметрах Rails

class PeopleController < ActionController::Base 

    def create 
    @person = Person.new(person_params) 
    @person.name = "ABC" 
    @person.save 
    end 

    private 

    def person_params 
     params.require(:person).permit(:name, :age) 
    end 
end 

ответ

5

Если все, что вам нужно сделать, это переопределить имя какой-либо другой строки, или отформатировать его перед сохранением, вы можете просто сделать:

@person = Person.new(person_params.merge!(name: 'ABC')) 

Если вы хотите сделать создать и объединить в одна строка, просто сделать это:

def create 
    @person = Person.create(person_params.merge!(name: 'ABC')) 
end 
+1

Зачем вам когда-либо вводить код на другом языке, чем Ruby. –

+0

Не много концертов Ruby/Rails во Флориде! – DerProgrammer

0

Вы также могли бы сделать что-то похожее на это: http://api.rubyonrails.org/classes/ActionController/Parameters.html

Похоже, вы сформировали бы хэш из параметров, которые вы хотите. От ссылки:

params = ActionController::Parameters.new({ 
    person: { 
    name: 'Francesco', 
    age: 22, 
    role: 'admin' 
    } 
}) 

permitted = params.require(:person).permit(:name, :age) 
permitted   # => {"name"=>"Francesco", "age"=>22} 
permitted.class  # => ActionController::Parameters 
permitted.permitted? # => true 

Person.first.update!(permitted) 
# => #<Person id: 1, name: "Francesco", age: 22, role: "user"> 
Смежные вопросы