2013-04-27 76 views
1

因此,我已经成功地构建了一个MYSQL数据库,并将一堆信息刮进它。我遇到的问题是我真的很难理解我想从数据库中显示一个随机条目到我的视图中。我一直在阅读MVC和渲染,但我显然缺少一些东西。我想告诉你我到目前为止所做的,希望能够从这里得到一些指导。我觉得我真的很苦恼,因为它目前是空白的!从数据库显示随机条目到我的视图

谢谢!

我的模型:

class Sandwich < ActiveRecord::Base 
    attr_accessible :country, :description, :image, :name 
    def self.random_sandwich 
Sandwich.find(:first, :order => "RAND()") 
    end 
end 

我的控制器:

class SandwichesController < ApplicationController 
    # GET /sandwiches 
    # GET /sandwiches.json 
    def index 
    @sandwich = Sandwich.random_sandwich 

    respond_to do |format| 
     format.html # index.html.erb 
     format.json { render json: @sandwiches } 
    end 
    end 

    # GET /sandwiches/1 
    # GET /sandwiches/1.json 
    def show 
    @sandwich = Sandwich.find(params[:id]) 

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

    # GET /sandwiches/new 
    # GET /sandwiches/new.json 
    def new 
    @sandwich = Sandwich.new 

    respond_to do |format| 
     format.html # new.html.erb 
     format.json { render json: @sandwich } 
    end 
    end 

    # GET /sandwiches/1/edit 
    def edit 
    @sandwich = Sandwich.find(params[:id]) 
    end 

    # POST /sandwiches 
    # POST /sandwiches.json 
    def create 
    @sandwich = Sandwich.new(params[:sandwich]) 

    respond_to do |format| 
     if @sandwich.save 
     format.html { redirect_to @sandwich, notice: 'Sandwich was successfully created.' } 
     format.json { render json: @sandwich, status: :created, location: @sandwich } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @sandwich.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # PUT /sandwiches/1 
    # PUT /sandwiches/1.json 
    def update 
    @sandwich = Sandwich.find(params[:id]) 

    respond_to do |format| 
     if @sandwich.update_attributes(params[:sandwich]) 
     format.html { redirect_to @sandwich, notice: 'Sandwich was successfully updated.' } 
     format.json { head :no_content } 
     else 
     format.html { render action: "edit" } 
     format.json { render json: @sandwich.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /sandwiches/1 
    # DELETE /sandwiches/1.json 
    def destroy 
    @sandwich = Sandwich.find(params[:id]) 
    @sandwich.destroy 

    respond_to do |format| 
     format.html { redirect_to sandwiches_url } 
     format.json { head :no_content } 
    end 
    end 
end 

回答

2

尝试用随机的订购,然后找到第一个项目。 Smth是这样的:

Sandwich.order("RAND()").first 
1

我认为它会变慢。因为它将随机化所有数据并挑选第一个数据。

还有另一种方法。生成一个介于0和总三明治之间的随机数字 - 1.使用该数字作为偏移来获得随机三明治。

random_number = rand(Sandwich.count) 
random_sandwich = Sandwich.limit(1).offset(random_number) 
相关问题