我正在尝试创建一个用于管理学术会议的应用程序。用户将登录并提交摘要,以便考虑在我们的年会上展示。对于我所做的大部分工作,我都遵循了“Ruby on Rails 3 Tutorial”。我的修改包括添加提交模型,注册模型和订单模型。提交模型属于User模型和has_one顺序。
我正在尝试使用有关使用ActiveMerchant集成PayPal Express结帐的Railscast 145/146集。我的目标是在提交的show.html.erb页面上放置一个PayPal结账按钮,以便在作者提交摘要后他可以立即支付提交费用。
在我提交订单后,以下代码出现错误:
class OrdersController < InheritedResources::Base
def new
@order = Order.new
end
def create
@order = current_submission.orders.build_order(params[:order])
@order.ip_address = request.remote_ip
if @order.save
# flash[:notice] = "Successfully created order."
#redirect_to orders_url
else
render :action => 'new'
end
end
end
据我所读,我认为问题与订单与提交的关系有关。每个提交都应该有一个相关的订单条目,因此在Order表中应该有一个submission_id。我真的很困惑这是如何工作的。
有人可以指出我正确的方向吗?是否有您推荐我阅读的用户指南?在不同版本的Rails之间似乎存在很多冲突的信息。我正在使用Rails 3.0.10。
谢谢!
答案 0 :(得分:2)
您应该将资源设置为
resources :submissions do
resource :order
end
这样,您的参数将反映通过:id
属性访问的特定提交。然后,您的orders#create
操作将更改为
@submission = Submission.find(params[:submission_id])
@order = @submission.orders.build_order(params[:order])
您在上面反映的关系似乎表明Submission has_many :orders
。关于你的评论
提交模型属于用户模型且has_one顺序。
在这种情况下,您需要将上述内容更改为 - 注意订单如何变为订单:
@order = @submission.order.build_order(params[:order])
所以你的关系是提交has_one:order;订单:belongs_to:提交和用户:has_one:提交?
<强>更新强>
根据您的描述描述您的要求,您的关系需要更改如下:
class User < ActiveRecord::Base
has_many :orders
has_many :submissions, :through => :orders
class Order < ActiveRecord::Base
# this table needs attributes user_id and session_id
belongs_to :user
belongs_to :session
validates :submission_id, :uniqueness => true
class Submission < ActiveRecord::Base
has_many :orders
has_many :users, :through => :orders
由于我在连接表上放置了唯一性约束,因此它将确保特定submission_id
只能在任何记录中出现一次。您可以像以前一样使用“订单”来设置您的控制器,它很可能是@submission = Submission.find(params[:id])
而不是@submission = Submission.find(params[:submission_id])
,因为订单是一种独特的资源。
如果您需要进一步的帮助,请发送电子邮件至ms at bsodmike dot com。