Рубин на рельсах - вложенные формы - PullRequest
0 голосов
/ 03 января 2011

У меня есть форма, которая устанавливает атрибуты модели, однако есть атрибут, который я хочу установить с помощью кода.То есть я хочу, чтобы пользователь установил некоторые атрибуты, но я хочу, чтобы программа установила другие атрибуты.

Есть ли способ сделать это?

Пример:

Если у меня есть таблица с колонкой «текст» и колонка «пользователь», я хочу, чтобы пользователь вводил текст, но я хочу, чтобы колонка «пользователь» была установлена ​​программой.Как мне это сделать?

Ответы [ 2 ]

2 голосов
/ 03 января 2011

Конечно. Вы могли бы сделать что-то вроде этого:

 def create
   @something = Something.new(params[:something])
   @something.programmatically_set_attribute = "Some value"  #Here's the part that matters

   respond_to do |format|
     if @host.save
       format.html { redirect_to(@something, :notice => 'Something was successfully created.') }
       format.xml  { render :xml => @something, :status => :created, :location => @something}
     else
       format.html { render :action => "new" }
       format.xml  { render :xml => @something.errors, :status => :unprocessable_entity }
     end
   end
end

В своей форме вы бы просто оставили поле, которое вы не хотите редактировать, руками человека. Вам также придется изменить функцию обновления.

0 голосов
/ 03 января 2011

Если вы хотите, чтобы пользователь мог обновлять только текстовый атрибут, и никто другой, вы можете использовать attr_accessible следующим образом

class MyModel < ActiveRecord::Base
  attr_accesssible :text
end

Это гарантирует, что только массовый атрибут MyModel может быть обновлен посредством массового назначения.

...