2017-01-20 2 views
0

Je suis confronté à un problème étrange; J'essaie d'afficher toutes les tâches associées à un membre du personnel, et il y a une erreur que je ne comprends pas:Afficher les éléments d'une table de jointure

  • Je ne peux accéder à l'ID de la tâche

Mon Code =

indice du personnel:

<% @staffs.each do |staff| %> 
    <tr> 
    <td> 
     <%= link_to staff.name, staff %> 
    </td> 
    <%staff.tasks.each do |task| %> 
     <td> 
     <%= task.id %>/
     </td> 
    <%end%> 
    </tr> 
<% end %> 

contrôleur du personnel:

class StaffsController < ApplicationController 
    before_action :authenticate_user! 
    skip_before_action :configure_sign_up_params 
    before_action :set_staff, only: [:show, :edit, :update, :destroy] 

    # GET /staffs 
    # GET /staffs.json 
    def index 
    @staffs = current_user.staffs 
    end 


    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_staff 
     @staff = Staff.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def staff_params 
     params.require(:staff).permit(:name, :user_id) 
    end 
end 

modèle du personnel:

class Staff < ActiveRecord::Base 
    has_one :user 
    has_many :ranches_staff 
    has_many :ranches, through: :ranches_staff 
    has_many :staffs_task 
    has_many :tasks, through: :staffs_task 
    accepts_nested_attributes_for :tasks, :allow_destroy => true 
end 
+0

Pouvez-vous ajouter l'erreur que vous obtenez? Peut-être ajouter le modèle Staff aussi. – Ursus

+0

Salut @Ursus, merci pour votre réponse, Mon erreur est: méthode non définie name » pour # J'ai ajouté le personnel de modèle dans mon post –

Répondre

1

Je suppose que vous essayez d'accéder aux attributs de l'objet de la tâche. L'objet de tâche est un attribut imbriqué de l'objet personnel. Pour accéder à ce que vous devez utiliser accepts_nested_attributes_for pour accéder task de staff comme suit:

class Staff < ActiveRecord::Base 
    has_many :tasks 
    accepts_nested_attributes_for :tasks, :allow_destroy => true 
end 

class Task < ActiveRecord::Base 
    belongs_to :staff 
end 

Edit: Maintenant que vous avez clairement fait savoir que la classe staff a une relation through avec staffs_task Je pense que le accepts_nested_attributes_for relation devrait être avec :staffs_task comme suit:

class Staff < ActiveRecord::Base 
    has_many :staffs_task 
    has_many :tasks, through: :staffs_task 
    accepts_nested_attributes_for :staffs_task, :allow_destroy => true 
    accepts_nested_attributes_for :tasks, :allow_destroy => true 
end 
+0

Hi @Dawcars, merci pour votre réponse, la chose est Cette tâche est une forme imbriquée d'un modèle Ranch. Mais le truc bizarre est que je peux appeler l'identifiant de la tâche, mais pas les autres variables. Alors devrais-je définir un set_ranch ou un set_task dans mon contrôleur de personnel? –

+0

S'il vous plaît voir la modification que j'ai faite ci-dessus – Dawcars