2017-03-12 21 views
0

所以我試圖創建一個新的「交易」,每次我點擊按鈕「購買」,但似乎沒有工作。我得到錯誤「未定義的方法`[]'nil:NilClass」。如何使用按鈕在導軌上張貼?

<% @comics.each do |comic|%> 
    <ul> 
    <li><%= comic.title %> </li> 
    <li><%= comic.author %> </li> 
    <li><%= comic.year %> </li> 
    <li><%= comic.publisher %> </li> 
    <% if user_signed_in? %> 
    <%= button_to 'Purchase', {:controller => "transactions", :action => "create", :seller_id => comic.user_id, :buyer_id=> current_user.id, :comic_id => comic.id} , {:method=>:post} %> 
    <% end %> 
</ul> 

這是你可以在交易控制器查找:

def create 
    @my_transaction = Transaction.new(
     buyer_id: params[:transaction][:buyer_id], 
     seller_id: params[:transaction][:seller_id], 
     comic_id: params[:transaction][:comic_id] 
    ) 
    @my_transaction.save 
     redirect_to "/transactions/" 
    end 

你有任何想法,爲什麼這可能發生?

謝謝!

回答

1

有幾種方法可以調試此:

  1. 看在控制檯日誌,看看有什麼被張貼在params哈希表。
  2. 在create語句的頂部添加一個puts語句以查看params變量中的內容,例如

控制器

def create 
    puts params.inspect 
end 

我懷疑你會發現params哈希表沒有一個transaction鍵和創建方法應該是

def create 
    @my_transaction = Transaction.new(
    buyer_id: params[:buyer_id], 
    seller_id: params[:seller_id], 
    comic_id: params[:comic_id] 
) 
end 
+0

謝謝!正是這樣!工作就像一個魅力:) – Aradeea

+0

np,如果我的答案有幫助,請點擊數字下面的複選標記以接受它 – margo

1

params[:transaction]是零,你可以請參閱日誌中發送的參數(如果服務器未記錄,則爲tail -f log/development.log)。在你的情況,你訪問所需的數據,如params[:comic_id]

一些提示:

永遠不要相信輸入來自客戶端: :buyer_id=> current_user.id這裏攻擊者可以發送任何ID自button_to助手將生成一個HTML形式使用devtool很容易訪問。請在服務器端檢查它。 seller_id也一樣,你可以取得相關漫畫comic = Comic.find params[:comic_id]

你可能要考慮像POST /comics/1/buy的另一個API方法,這是一個有點問題的REST,你可以使用內置的路徑傭工該URL像buy_comic_path(comic)