0

我是 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

我有很多问题。

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

如何在我的索引产品页面上创建一个按钮来为产品添加投票?

我不知道该怎么做,也找不到任何具有类似示例的教程或博客。

谢谢你的帮助。

4

1 回答 1

1

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

product.votes.count

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

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

一个涵盖 Rails 很多方面的好教程是:http ://ruby.railstutorial.org/chapters/beginning#top

编辑:

您的控制器中的 index 方法为您提供了您拥有的每种产品的数组。因此,如果您在索引视图中执行此类操作(如果您使用 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>

它应该做你想做的

于 2012-11-01T14:53:27.550 回答