【问题标题】:Why I can't loop back the information from db in RoR?为什么我不能从 RoR 中的 db 回送信息?
【发布时间】:2010-01-04 14:38:43
【问题描述】:

我有一个名为“order”的表,其中有许多“order_items”,每个“order_items”都是“order”和“product”的belongs_to。在数据库中,我有一条记录。记录是这样的:

订单表: 编号 = 1 名称=客户

order_items 表是这样的: id=1 product_id=233 order_id =1

id=2 product_id=454 order_id =1

我正在尝试用这段代码来显示订单,但并不成功:

<% semantic_form_for @order do |f| %>  
  <% f.inputs do %>  
    <%= f.input :name %>  

  <% end %>  
  <%= f.buttons %>  
<% end %>

这是我的订单.rb:

class Order < ActiveRecord::Base
  has_many :order_items



end

最后但同样重要的是,这是 order.rb 的控制器:

class OrderController < ApplicationController
  # GET /orders
  # GET /orders.xml
  def index
    @orders = order.all

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @orders }
    end
  end

  # GET /orders/1
  # GET /orders/1.xml
  def show
    @order = order.find(params[:id])

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

  # GET /orders/new
  # GET /orders/new.xml
  def new
    @order = order.new

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @order }
    end
  end

  # GET /orders/1/edit
  def edit
    @order = order.find(params[:id])
  end

  # POST /orders
  # POST /orders.xml
  def create
    @order = order.new(params[:order])

    respond_to do |format|
      if @order.save
        flash[:notice] = 'order was successfully created.'
        format.html { redirect_to(@order) }
        format.xml  { render :xml => @order, :status => :created, :location => @order }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @order.errors, :status => :unprocessable_entity }
      end
    end
  end

  # PUT /orders/1
  # PUT /orders/1.xml
  def update
    @order = order.find(params[:id])

    respond_to do |format|
      if @order.update_attributes(params[:order])
        flash[:notice] = 'order was successfully updated.'
        format.html { redirect_to(@order) }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @order.errors, :status => :unprocessable_entity }
      end
    end
  end

  # DELETE /orders/1
  # DELETE /orders/1.xml
  def destroy
    @order = order.find(params[:id])
    @order.destroy

    respond_to do |format|
      format.html { redirect_to(orders_url) }
      format.xml  { head :ok }
    end
  end
end

这是来自 RoR 的错误:

为 nil 调用 id,这将 错误地是 4——如果你真的 想要 nil 的 id,使用 object_id

【问题讨论】:

  • 您检查过您的路线吗? params[:id] 就是 nil。
  • 我的其他对象工作正常。只有“订单”不能

标签: ruby-on-rails ruby


【解决方案1】:

ruby 中的类必须大写:

Order # class
order # variable or method

这应该可行:

class OrderController < ApplicationController
  def show
    @order = Order.find(params[:id])

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

在你的 show.html.erb 中:

#...
<%= @order.name =>
#...

网址:

/orders/:id

如果你愿意,假设是标准的编辑表单:

# edit.html.erb

<% form_for @order do |f| %>  
  <%= f.input :name %>   
  # fields
  <%= f.submit "Place order" %>  
<% end %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-10
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    相关资源
    最近更新 更多