has_may为投票应用程序

时间:2012-11-01 14:12:03

标签: ruby-on-rails ruby-on-rails-3.2

我是关于rails的新手,我正在尝试制作自己的简单投票应用程序。我有两个模型:

class Product < ActiveRecord::Base
  attr_accessible :description, :title, :photo
  has_many :votes

  has_attached_file :photo, :styles => { :medium => "300x300" }

  before_save { |product| product.title = title.titlecase }

  validates :title, presence: true, uniqueness: { case_sensitive: false }
  validates :photo, :attachment_presence => true

end


class Vote < ActiveRecord::Base
  belongs_to :product
  attr_accessible :user_id
end

这是产品控制器

class ProductsController < ApplicationController

    http_basic_authenticate_with :name => "dhh", :password => "secret", :except => [:index]

    def index
        @products = Product.all
    end

    def indexprv
        @products = Product.all
    end

    def show
        @product = Product.find(params[:id])
    end

    def edit
        @product = Product.find(params[:id])
    end

    def new
        @product = Product.new
    end

    def create
        @product = Product.new(params[:product])
        if @product.save
            redirect_to @product
        else
            render 'new'
        end
    end

    def update
    @product = Product.find(params[:id])
    if @product.update_attributes(params[:product])
        flash[:success] = "Producto Actualizado"
        redirect_to root_path
    else
        render 'edit'
    end
  end

  def destroy
    Product.find(params[:id]).destroy
    flash[:success] = "Producto Eliminado."
    redirect_to root_path
  end

end

我有很多问题。

如何在产品索引页面上显示每种产品的总票数?

如何在索引产品页面上创建按钮以添加产品投票?

我不知道如何做到这一点,我找不到任何教程或类似的例子。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您的索引视图可能已遍历您拥有的每个产品(通过部分或循环)。在你的循环/部分做类似的事情:(假设变量产品有产品的实例)

product.votes.count

获得投票数。要获得添加投票的按钮,请执行以下操作:

link_to "Add Vote", new_product_vote_path(product), action: :new

涵盖rails的许多方面的好教程是:http://ruby.railstutorial.org/chapters/beginning#top

编辑:

控制器中的索引方法为您提供了每个产品的数组。所以,如果你在索引视图中做了类似的事情(如果你使用的是erb):

<ul>
<% @products.each do |product| %>
 <li> 
  <%= product.title %>: <br />
  Votes: <%= product.votes.count %> <br />
  <%= link_to "Add Vote", new_product_vote_path(product), action: :new %>
 </li>
<% end %>
</ul>

它应该做你想做的事情