2014-05-10 2 views
2

J'ai essayé de faire mon a et appartient à beaucoup de relation au travail, en suivant les guides Rails et tout ce que j'ai pu trouver en ligne, mais ils ne se montreront pas .. Quand je enregistrer mon formulaire ses seuls INSERTS dans le modèle Pin, il n'insère aucune relation. Si j'ajoute la relation manuellement via le terminal comme ceci:A plusieurs cases à cocher ne sauvera pas Rails 4

p = Pin.new 
p.minors = [1,2] 
p.save 

Il fonctionne, mais ma forme qui ressemble à ceci (iam à l'aide de rails 4, donc collections youpi), il ne sauve pas les relations (il sauve la broche très bien)

new.html.erb

<%= collection_check_boxes(:minor_ids, :minor_ids, Minor.all, :id, :name) %> 
    <%= collection_check_boxes(:competence_ids, :competence_ids, Competence.all, :id, :name) %> 

pinscontroller.rb

class PinsController < ApplicationController 

def create 
    @pin = Pin.new(pin_params) 
    @pin.user_id = current_user.id 

    if @pin.save 
    redirect_to pin_path(@pin) 
    end 
end 

def new 
@pin = Pin.new() 
end 

def show 
@pin = Pin.find(params[:id]) 
end 


private 
def pin_params 
params.require(:pin).permit(:title, :name, :url, { :minor_ids => [] }, { :competence_ids => [] },) 
end 

fin

et mon modèle Pin.rb

class Pin < ActiveRecord::Base 
belongs_to :user 
has_and_belongs_to_many :minors 
has_and_belongs_to_many :competences 
end 

Minor.rb

class Minor < ActiveRecord::Base 
has_and_belongs_to_many :pins 
end 

Competence.rb

class Competence < ActiveRecord::Base 
    has_and_belongs_to_many :pins 
end 

pin/show.html.erb

Ceci est la façon dont je tente de vérifier si les relations ont traversé. Ils reviennent tous vides et 0, sauf ceux que j'ai fait à travers la console.

<%= @pin.minors.count.inspect %> 
<%= @pin.competences.count.inspect %> 

<% if [email protected]? %> 
<%= @pin.minors.each do |minor| %> 
    <%= minor.name %> 
<% end %> 
<% end %> 

<% if [email protected]? %> 
<%= @pin.competences.each do |comp| %> 
    <%= comp.name %> 
<% end %> 
<% end %> 

schema.rb

create_table "competences", force: true do |t| 
t.string "name" 
t.datetime "created_at" 
t.datetime "updated_at" 
t.integer "pin_id" 
end 

create_table "competences_pins", force: true do |t| 
t.integer "pin_id" 
t.integer "competence_id" 
t.datetime "created_at" 
t.datetime "updated_at" 
end 

create_table "minors", force: true do |t| 
t.string "name" 
t.datetime "created_at" 
t.datetime "updated_at" 
t.integer "pin_id" 
end 

create_table "minors_pins", force: true do |t| 
t.integer "pin_id" 
t.integer "minor_id" 
t.datetime "created_at" 
t.datetime "updated_at" 
end 

create_table "pins", force: true do |t| 
t.string "title" 
t.string "url" 
t.string "image" 
t.string "username" 
t.integer "views" 
t.datetime "created_at" 
t.datetime "updated_at" 
t.integer "user_id" 
end 

Alors, suis-je manque une étape? Jusqu'à présent, j'ai tout essayé, mais les minors_pins et les competences_pins les tables restent vides, toute l'aide et la perspicacité que je peux obtenir!

Répondre

0

J'ai corrigé ceci en ajoutant @minors = Minor.all dans le contrôleur de broches de la nouvelle méthode. Et en remplaçant <%= collection_check_boxes(:minor_ids, :minor_ids, Minor.all, :id, :name) %> avec <%= f.collection_check_boxes(:minor_ids, @minors, :id,:name)%>

Questions connexes