2011-10-02 113 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爲你完成的。 –

相關問題