【发布时间】:2017-10-04 19:54:18
【问题描述】:
我有一个通过 devise 创建的用户模型、一个股票模型(通过脚手架生成),因此我可以使用我自己的自定义价格创建一个股票数据库,以及一个用于在两者之间建立关联的 UserStock 模型。在我的 UI 和控制台中,一切似乎都运行良好。
这就是问题所在。 我有一个与我的 _list.html.erb 中配置的按钮相关联的删除方法,该按钮显示用户投资组合中的所有股票。当我第一次删除它时,(从我的投资组合中删除股票)它工作正常。当我再次将股票添加到我的投资组合中时,当然效果很好。但是第二次删除不起作用。 比如说,我的用户 ID 是 1。我的 UserStock 关联在 user_id 1 和 stock_id 1 之间创建了一个关联(比如 ID 为 1 的股票是 Google)。这存储在 UserStock id 1 中。当我删除此关联并重新创建它时,它存储在 UserStock id 2(一个全新的关联)中。但是当我再次尝试删除它时,我无法这样做。我的 Rails 控制台在我的 UserStock 控制器中显示此错误。
这是弹出的错误:Record Not Found in UserStocksController#destroy
def set_user_stock
@user_stock= UserStock.find(params[:id])
end
编辑:当然,这是我的观点和所需的模型:
<% 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 %>
用户.rb
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
【问题讨论】:
-
您在哪个视图上,该视图的代码是什么样的?我会说你会有一个连接表的控制器是不寻常的。通常,您会为此使用用户控制器之类的东西,并使用
@user.user_stocks找到 UserStock,然后您可以将删除附加到该控制器上。 -
您需要向我们展示您的观点,以及相关模型,以便我们为您提供帮助。
-
@ruby_newbie 我知道这很不寻常。这只是为了客户的方便(因为这是一个股票交易游戏,他们更容易看到参与者通过这张表跟踪哪些股票)。但它仍然应该工作。我已经更新了上面的代码。
-
"这存储在 UserStock id 1 中。当我删除此关联并重新创建它时,它存储在 UserStock id 2(一个全新的关联)中。"这就是自动递增数据库列的工作方式,每次插入一行时它都会上升。不是行数的计数。
-
是的,我想通了。然而,问题在于视图中调用了 user_stock。如果我检查 user_stock,它正在检索股票名称、符号、价格和 ID,而不是 user_stock 关联 ID。这就是删除请求不起作用的原因,它正在查询要删除的错误 ID。我该如何解决这个问题?
标签: ruby-on-rails activerecord