Rails - есть ли способ обновить один атрибут? - PullRequest
7 голосов
/ 22 мая 2011

Мне было просто интересно, у меня есть модель, которая, помимо идентификаторов из других моделей (FK), имеет единственный атрибут boolean.Я хочу знать, как я могу создать кнопку, которая изменяет эту boolean и только эту

Моя модель, о которой идет речь, такая:

class Squad
 belongs_to :player
 belongs_to :team
end

Я хочу создать кнопку наteam#show, поэтому player, которому принадлежит team, может изменить boolean из squad.Как я могу это сделать и как будут выглядеть мои контроллеры?

Спасибо:)!

-Edit-

Я использую ссылкукак это:

<%=link_to("Change status", squad_path(sqd, :status => true), :method => :put, :confirm => "Sure?")%>

Где sqd является частью моего запроса.Эта ссылка неправильная?

Ответы [ 3 ]

12 голосов
/ 22 мая 2011
<%= link_to("Change status", squad_path(sqd, "squad[status]" => true), :method => :put, :confirm => "Sure?") %>

в вашем контроллере (это довольно часто)

def update
  @squad = Squad.find params[:id]
  if @squad.update_attributes params[:squad]
    ...
  end
end
3 голосов
/ 22 мая 2011

Да, есть. Метод называется «update_attribute». Требуется два аргумента: имя поля и значение.

  squad.update_attribute(:boolean_field,true) # or false

На основе обновленного вопроса

def update
  @squad = Squad.find(params[:id])
  if @squad.update_attribute(:status,params[:status])
    ...
  end
end
0 голосов
/ 22 мая 2011

Как называются ваши атрибуты?

Поскольку он принадлежит player, вы можете получить к нему доступ с помощью player.squad.name_of_your_attributes = new_value.Не забудьте save ваш объект, если вы хотите, чтобы изменения были сохранены в вашей БД.

Также вы можете прочитать , что

РЕДАКТИРОВАТЬ: fl00r ответилВаш отредактированный вопрос, нет необходимости повторять то, что он написал.

...