Запишите в БД с помощью form_for и метода, определенного в модели - PullRequest
0 голосов
/ 08 сентября 2010

Я хочу реализовать подобный счетчик на объекте.Каждый раз, когда нажимают кнопку «Мне нравится», я хочу обновить поле базы данных объекта.

В представлении контроллеров я разместил следующую форму:

<% form_for(@book) do |f| %>
 <p>
  <% @book.update_like(@book)%>
  <%= f.submit "I like" %>
 </p>
<% end %>

Метод update_likeвызывается в модели book.rb и выглядит следующим образом:

def update_like(in_book)
    in_book.like_tag = in_book.like_tag + 1;    
end

вызывается метод update_like, но база данных не обновляется.Я не понимаю, что происходит не так.Любая помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 08 сентября 2010

вы не знаете концепции ruby ​​на рельсах;)

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

То, что вы ищете, это link_to_remote (это не будет работать с Rails 3 !!)

Посмотрите: http://apidock.com/rails/ActionView/Helpers/PrototypeHelper/link_to_remote

Итак, вы создаете контроллер, скажем так: "CommentsController "и добавьте действие вроде" like_it "

Тогда все может выглядеть следующим образом:

Контроллер:

class CommentsController < ApplicationController

  def like_it

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

    render :nothing => true

  end

end

Модель:

class Book < ActiveRecord::Base

  def update_like
    self.like_tag += 1
    self.save

  end

end

По вашему мнению:

link_to_remote "I like it!!", :url => { :controller => 'comments', :action => 'like_it', :id => placeCommentIDHere }, :complete => 'alert('You liked it!!');'

Я посмотрел ваш профиль и увидел, что вы тоже из Швейцарии!Возможно, вы говорите по-немецки, если вы это сделаете, вам следует прочитать эту книгу (это бесплатно!): http://openbook.galileocomputing.de/ruby_on_rails/

PS: link_to_remote больше не поддерживается в Rails 3.0 !!

Gruess

Саймон;)

0 голосов
/ 08 сентября 2010

Вам нужно сохранить свой объект

def update_like(in_book)
    in_book.like_tag = in_book.like_tag + 1
    save
end

Но лучше всего сделать это в контроллере.

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