在rails中删除并重新创建相同的关联

时间:2017-10-04 19:54:19

标签: ruby-on-rails activerecord

我有一个通过设计创建的用户模型,一个股票模型(通过脚手架生成),因此我可以使用自己的自定义价格创建一个股票数据库,并使用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控制器中指示此错误。

这是弹出的错误:在UserStocksController中找不到记录#troy

  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 %>

user.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

stock.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

1 个答案:

答案 0 :(得分:1)

如果您尝试做的是迭代用户拥有的股票,您应该从user_stocks结束而不是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 %>