2017-10-04 7 views
0

私は自分のカスタム価格で在庫データベースを作成できるように、在庫モデル(足場から生成された)を使用して作成したユーザーモデルと、関連付けを確立するUserStockモデルふたつの間に。すべてのUIと私のコンソールの両方で正常に実行されるようです。レールでの同じ関連付けの削除と再作成

ここにキャッチがあります。 私の_list.html.erbで設定されたボタンに関連付けられたdeleteメソッドがあり、ユーザーのポートフォリオのすべての株が表示されます。私が最初にそれを削除すると(私のポートフォリオから株式を取り除く)、それはうまく動作します。私が再び株式を私のポートフォリオに加えると、もちろんうまくいく。しかし、2度目の削除は機能しません。 たとえば、私のユーザーIDが1であるとします。私のUserStockアソシエーションは、user_id 1とstock_id 1の間の関連付けを作成します(id 1の株はGoogleです)。これはUserStock id 1に保存されます。この関連付けを削除して再作成すると、UserStock id 2(新しい関連付け)に格納されます。しかし、私がもう一度それを削除しようとすると、私はそうすることができません。私のレールコンソールはUserStockコントローラでこのエラーを示します。

これがポップアップ表示されますエラーです:確かに、ここに私の見解と必要なモデルがあります:

  <% if @user.id = current_user.id %> 
      <td> 
      <%=link_to "Delete", user_stock_path(user_stock), :method 
      => :delete, :data => { :confirm => "Are you sure?" }, 
      :class => "btn btn-xs btn-danger" %> 
      </td> 
      <% end %> 

user.rb

UserStocksController#にはないレコード

def set_user_stock 
    @user_stock= UserStock.find(params[:id]) 
    end 

EDITを破壊します

 has_many :user_stocks 
    has_many :stocks, through: :user_stocks 
    def can_add_stock?(ticker_symbol) 
     !stock_already_added?(ticker_symbol) 
    end 

    def stock_already_added?(ticker_symbol) 
     stock = Stock.find_by_ticker(ticker_symbol) 
     return false unless stock 
     user_stocks.where(stock_id: stock.id).exists? 
    end 

株.rb

has_many :user_stocks 
has_many :users, through: :user_stocks 
def self.find_by_ticker(ticker_symbol) 
    where(ticker: ticker_symbol).first 
end 

user_stock.rb

belongs_to :user 
belongs_to :stock 
+0

どのビューが表示されていて、そのビューのコードはどのように見えますか?私はあなたがジョインテーブルのコントローラを持つことは珍しいと言います。通常、これにはUsersコントローラのようなものを使い、 '@ user.user_stocks'でUserStockを見つけて、それにあなたの削除を添付することができます。 –

+0

私たちにあなたのお手伝いをさせていただきます。 – the12

+0

@ruby_newbie私はそれが珍しいことを知っています。これはクライアントの便宜のためです(株式取引ゲームなので、参加者がこのテーブルでどのような株式を追跡しているのかを簡単に確認できます)。それにもかかわらず、それは動作するはずです。上記のコードを更新しました。 – Solias

答えて

1

ユーザーが所有している株式を反復処理されるあなたが何しようとしているあなたの代わりにstocks協会のuser_stocks端に開始すべきである場合:

<% @user.user_stocks.each do |user_stock| %> 
    <td><%= user_stock.stock.ticker %></td> 
    <td><%= user_stock.stock.name %></td> 
    <% if @user.id = current_user.id %> 
    <td> 
    <%= link_to "Delete", user_stock_path(user_stock), method: :delete, data: { confirm: "Are you sure?" }, class: "btn btn-xs btn-danger" %> 
    </td> 
    <% end %> 
<% end %> 
+0

私は '未定義のローカルメソッドまたは変数 "us"をあなたの​​ビュー – Solias

+0

Hi max。私は今、論理を持っているように感じる。私はこれが正しいパスだと思います。ここでは、user_stocksの関連付けを使ってdoループを繰り返します。しかし、私はコンソールエラー "未定義のメソッドまたは変数私たち"を取得しています。これをどうやって解決するのですか? – Solias

+0

それは私の部分のちょうどタイプミスです。編集しました – max

関連する問題