Rails 3, меняя определенное значение подряд - PullRequest
0 голосов
/ 29 декабря 2010

Этот вопрос кажется смехотворно простым, но я, кажется, застрял.

Допустим, у нас есть таблица "Книги"

Каждая книга имеет название, описание и статус.

Допустим, я хочу создать ссылку в представлении шоу, которая при щелчке, например, изменяет только статус (на "чтение").

Пока я пытался добавитьБлок в контроллере, который говорит:

def read

  @book = Book.find(params[:id])
  @book.status = "Read"
  @book.update_attributes(params[:book])

  respond_to do |format|
    format.html { redirect_to :back}
    format.xml  { render :xml => @book }
  end

end

Затем я добавил ссылку на представление, которое выглядит следующим образом: <% = link_to "Чтение", read_book_path (@book),: method =>:положить%>

Это не работает вообще.Я добавил его к своим маршрутам, но это, кажется, не имеет значения.

Любая помощь будет отличной!Спасибо!

-Elliot

РЕДАКТИРОВАТЬ: Забыл добавить, я получаю NoMethodError: неопределенный метод `read_book_path '

Ответы [ 2 ]

2 голосов
/ 29 декабря 2010

Вам необходимо определить метод с именем read:

def read
  @book = Book.find(params[:id])

  @book.status = "Read"
  @book.save
end

Затем вам нужно <% = link_to "Read", read_book_path (@book),: remote => true%>

и в rout.rb:

resources :books do
  member do
    get 'read'
  end
end

Как только это сработает, возитесь с изменением метода на: put

0 голосов
/ 29 декабря 2010

Если все, что вы пытаетесь сделать, это установить атрибут status в книге и не обновлять никакие другие параметры, то вызывать update_attributes не нужно.

изменение:

@book.update_attributes(params[:book])

до:

@book.save!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...