我在尝试保存到中间表时遇到问题。我是Rails的新手,我花了几个小时就完成了这个但却无法让它工作,也许我做错了。任何帮助将不胜感激。 =)
该应用程序是一个简单的书店,登录用户选择书籍然后创建订单。
显示以下错误:
NameError in OrderController#create
uninitialized constant Order::Orderlist
这些是我的模特:
class Book < ActiveRecord::Base
has_many :orderlists
has_many :orders, :through => :orderlists
end
class Order < ActiveRecord::Base
belongs_to :user
has_many :orderlists
has_many :books, :through => :orderlists
end
class OrderList < ActiveRecord::Base
belongs_to :book
belongs_to :order
end
这是我的订单管理员:
class OrderController < ApplicationController
def add
if session[:user]
book = Book.find(:first, :conditions => ["id = #{params[:id]}"])
if book
session[:list].push(book)
end
redirect_to :controller => "book"
else
redirect_to :controller => "user"
end
end
def create
if session[:user]
@order = Order.new
if @order.save
session[:list].each do |b|
@order.orderlists.create(:book => b) # <-- here is my prob I cant make it work
end
end
end
redirect_to :controller => "book"
end
end
Thnx提前!
曼努埃尔
答案 0 :(得分:2)
我只是有时间看一下这个,我很害怕,但我发现的第一件事就是你的has_many
关系被称为:orderlists
。我认为需要:order_lists
,并带有下划线。
答案 1 :(得分:1)
这与您的问题没有直接关联,但是此查询:
book = Book.find(:first, :conditions => ["id = #{params[:id]}"])
...容易受到sql注入攻击。在这种情况下,params [:id]的内容会在没有正确转义的情况下传递给sql。我建议将此行更改为以下内容:
book = Book.find(:first, :conditions => ["id = ?, params[:id]])
以下解释:http://wiki.rubyonrails.org/howtos/security/sql_injection
答案 2 :(得分:0)
是的,这是其中一个问题。然后我可以在'create'方法中使用这一行:
def create
if session[:user]
@order = Order.new
if @order.save
session[:list].each do |b|
OrderList.create(:book => b, :order => @order)
end
end
end
redirect_to :controller => "book"
end
谢谢Chris