Добавление счетчика нажатий кнопок в рельсах 3 - PullRequest
2 голосов
/ 30 декабря 2011

Я хочу добавить кнопки в мою статью, чтобы я мог знать, сколько раз ее кликнул и обновить счетчик в базе данных, я использую mongoid, моя модель:

class Article
  include Mongoid::Document
  include Mongoid::Timestamps
  field :title, :type => String
  field :content, :type => String
  field :likes, :type => Integer ,:default => 0
  field :dislikes, :type =>Integer, :default => 0
  field :spam, :type => Integer, :default => 0
end

Мои статьи показываютконтроллер:

  def show
    @article = Article.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.json { render :json => @article }
    end
  end

Мой вид для шоу:

<p id="notice"><%= notice %></p>

<p>
  <b>Title:</b>
  <%= @article.title %>
</p>

<p>
  <b>Content:</b>
  <%= raw @article.content %>
</p>

Likes : <%= @article.likes %>  <br/>
Dislikes : <%= @article.dislikes %><br/>
Spams : <%= @article.spam %><br/>


<%= link_to 'Edit', edit_article_path(@article) %> |
<%= link_to 'Back', articles_path %>

Я нахожу что-нибудь об этом в интернете.

Как мне этого добиться?

Ответы [ 2 ]

4 голосов
/ 31 декабря 2011

Самое простое, что можно сделать, это добавить click_count целочисленный атрибут к вашей Article модели, а затем увеличить его в коде контроллера:

def show
  @article = Article.find(params[:id])
  @article.increment! :click_count

  respond_to do |format|
    format.html # show.html.erb
    format.json { render :json => @article }
  end
end
0 голосов
/ 31 декабря 2011

Я сделал это, фу!

Я добавил следующую форму в свой show.html.erb:

<%=form_for(@article,:action=>"update") do |f| %>
<%= submit_tag "Like", :name=>"like"%>
<%= submit_tag "Dislike",:name=>"dislike"%>
<%= submit_tag "Spam",:name=>"spam" %>
<%end%>

и написал следующий контроллер обновлений:

def update
    @article=Article.find(params[:id])
    if params[:like]
      @article.likes=@article.likes+1
    elsif params[:dislike]
      @article.dislikes=@article.dislikes+1
    elsif params[:spam]
      @article.spams=@article.spams+1
    end
    respond_to do |format|
      if @article.update_attributes(params[:article])
        format.html {redirect_to @article, :notice => "Article Updated"}
      else
        format.html {render :action=>"edit", :notice=> "Unable to update Article , sorry! :("}
      end
    end
  end

Это сработало как шарм.

...