[英]Why I can't loop back the information from db in RoR?
I have a table called "order" which has many "order_items" , each "order_items" is belongs_to "order" and "product". 我有一个名为“ order”的表,其中有许多“ order_items”,每个“ order_items”都属于“ order”和“ product”。 In the db, I have one record in order.
在数据库中,我按顺序有一条记录。 the record is like this:
记录是这样的:
orders table: id = 1 name= customer 订单表:id = 1名称=客户
and the order_items table is like this: id=1 product_id=233 order_id =1 并且order_items表是这样的:id = 1 product_id = 233 order_id = 1
id=2 product_id=454 order_id =1 id = 2 product_id = 454 order_id = 1
I am trying to this code to show the order, but it is not success: 我正在尝试使用此代码显示顺序,但未成功:
<% semantic_form_for @order do |f| %>
<% f.inputs do %>
<%= f.input :name %>
<% end %>
<%= f.buttons %>
<% end %>
and this is my order.rb: 这是我的order.rb:
class Order < ActiveRecord::Base
has_many :order_items
end
last but not least, this is the controller of order.rb: 最后但并非最不重要的是,这是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
And this is the error from RoR: 这是来自RoR的错误:
Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id
称为id的nil,错误地为4-如果您确实想要nil的id,请使用object_id
Classes in ruby have to be uppercased: 红宝石类必须大写:
Order # class
order # variable or method
this should work: 这应该工作:
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
in your show.html.erb: 在您的show.html.erb中:
#...
<%= @order.name =>
#...
url: 网址:
/orders/:id
if you want, let's say a standard edit form: 如果需要,我们可以说一个标准的编辑表单:
# edit.html.erb
<% form_for @order do |f| %>
<%= f.input :name %>
# fields
<%= f.submit "Place order" %>
<% end %>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.