2011-10-02 124 views
0

我正在尝试创建一个管理学术会议的应用程序。用户将登录并提交摘要,供考虑在年度大会上发布。对于我所做的大部分工作,我都遵循了“Ruby on Rails 3教程”。我的修改包括添加提交模型,注册模型和订单模型。提交模型属于用户模型和has_one订单。未定义的局部变量或方法`current_submission'for#<OrdersController:0x000000056a6a30>

我正在尝试关注使用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 

从我已阅读,我认为这个问题有订单如何与意见做。每个提交应该有一个相关的订单条目,所以在订单表中应该有一个submission_id。我很困惑这是如何工作的。

难道有人请指点我正确的方向吗?是否有用户指南,你会建议我阅读? Rails的不同版本之间似乎存在很多冲突的信息。我正在使用Rails 3.0.10。

谢谢!

+0

“current_submission”没有上下文;你如何设置你的资源?我也不确定用户的'has_one'订单关联。 –

+0

我的routes.rb文件包含:资源:提交我意识到提交是复数。我认为资源指向控制器而不是模型。 – user975604

+0

注意更新你的模型关系,根据你以前的评论,感觉不对。 –

回答

2

,您应该设置你的资源

resources :submissions do 
    resource :order 
end 

这样你PARAMS将反映特定提交被通过:id属性访问。然后你orders#create行动将改变

@submission = Submission.find(params[:submission_id]) 
@order = @submission.orders.build_order(params[:order]) 

你在上面反映似乎表明Submission has_many :orders的关系。关于您的评论

提交模型belongs_to用户模型和has_one订单。

在这种情况下,你需要以上更改为 - 注意订单是如何成为顺序:

@order = @submission.order.build_order(params[:order]) 

所以,你的关系是提交HAS_ONE:订单;订单: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]),因为订单是单一资源。

如果您需要进一步的帮助,请发邮件给我在bsodmike dot com的mike。

+0

谢谢你的回答。我做了你建议的改变,尝试订单和订单。现在我收到错误“无路线匹配/订单”。我添加资源:命令的routes.db文件,它似乎工作。再次感谢您的慷慨帮助。 – user975604

+0

不,它现在给我错误“找不到没有ID的提交” – user975604

+0

检查参数散列是否应该使用':id':或':submission_id'。还要确保你的表迁移是正确的 - 所有'belongs_to'表都需要一个你需要创建的外键,也就是说这不是由Rails为你完成的。 –

相关问题