2017-10-04 2 views
0

J'ai un modèle utilisateur créé par legs, un modèle de stock (généré par un échafaudage) afin que je puisse créer une base de données de stocks avec mes propres prix personnalisés et un modèle UserStock pour établir une association entre les deux. Tout semble fonctionner correctement dans mon interface et ma console.Supprimer et recréer la même association dans les rails

Voici la capture. J'ai une méthode de suppression liée à un bouton qui est configuré dans mon _list.html.erb qui affiche tous les stocks dans le portefeuille de l'utilisateur. Lorsque je le supprime la première fois, (retirer du stock de mon portefeuille) ça fonctionne bien. Quand je rajoute le stock à mon portefeuille, ça marche bien, bien sûr. Mais la suppression la deuxième fois ne fonctionne pas. Dites, par exemple, mon ID utilisateur est 1. Mon association UserStock crée une association entre user_id 1 et stock_id 1 (disons stock avec l'ID 1 est Google). Ceci est stocké dans UserStock id 1. Lorsque je supprime cette association et la recréer, elle est stockée dans UserStock id 2 (une toute nouvelle association). Mais quand j'essaye de le supprimer à nouveau, je suis incapable de le faire. La console My rails indique cette erreur dans mon contrôleur UserStock.

C'est l'erreur qui apparaît: Enregistrement introuvable dans UserStocksController # détruire

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

EDIT: Bien sûr, voici mon avis et les modèles nécessaires:

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

Sur quelle vue êtes-vous et à quoi ressemble le code pour cette vue? Je dirai qu'il est inhabituel que vous ayez un contrôleur pour une table de jointure. Habituellement, vous utiliserez quelque chose comme le contrôleur des utilisateurs pour cela et trouver le UserStock avec '@ user.user_stocks' et vous pouvez joindre votre suppression à cela. –

+0

Vous devez nous montrer votre point de vue, ainsi que les modèles pertinents pour nous de vous aider. – the12

+0

@ruby_newbie Je sais que c'est inhabituel. C'est juste pour la commodité du client (puisqu'il s'agit d'un jeu de trading boursier, il est plus facile pour eux de voir quels stocks les participants suivent à travers ce tableau). Mais cela devrait fonctionner néanmoins. J'ai mis à jour mon code ci-dessus. – Solias

Répondre

1

Si ce que vous essayez de faire est itérer les actions détenues par un utilisateur, vous devriez commencer à la fin user_stocks au lieu de l'association 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

Je reçois une 'méthode locale non définie ou variable "nous"' dans votre vues – Solias

+0

Salut max. J'ai l'impression d'avoir la logique maintenant. Je pense que c'est le bon chemin, où j'itère la boucle do à travers l'association user_stocks. Mais je reçois une erreur de console "méthode non définie ou variable us". Comment résoudre ça? – Solias

+0

C'est juste une faute de frappe de ma part.édité – max