私は自分のカスタム価格で在庫データベースを作成できるように、在庫モデル(足場から生成された)を使用して作成したユーザーモデルと、関連付けを確立する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
どのビューが表示されていて、そのビューのコードはどのように見えますか?私はあなたがジョインテーブルのコントローラを持つことは珍しいと言います。通常、これにはUsersコントローラのようなものを使い、 '@ user.user_stocks'でUserStockを見つけて、それにあなたの削除を添付することができます。 –
私たちにあなたのお手伝いをさせていただきます。 – the12
@ruby_newbie私はそれが珍しいことを知っています。これはクライアントの便宜のためです(株式取引ゲームなので、参加者がこのテーブルでどのような株式を追跡しているのかを簡単に確認できます)。それにもかかわらず、それは動作するはずです。上記のコードを更新しました。 – Solias