2017-02-11 3 views
0

Ok, donc probablement une question très simple à répondre je suppose. J'ai l'air d'avoir cassé une fonctionnalité de mon application qui affiche le nom d'utilisateur de la personne qui a soumis le message (dans mon cas 'pin').Post.Username ne s'affiche pas dans haml?

Tout cela s'est passé à peu près au moment où j'ai ajouté des noms d'utilisateur à la base de données (concevoir) comme précédemment j'affichais seulement des adresses email et senti que ce n'était pas vraiment ce que je voulais.

Tl; dr: = pin.user.username (app/views/broches/index.html.haml) ne montre pas le nom d'utilisateur de la personne qui a soumis le poste. Cependant, il affichera un courriel avec pin.user.email.

Voici mon PinsController (Pin dans mon cas est le poste en legs)

class PinsController < ApplicationController 
before_action :find_pin, only: [:show, :edit, :update, :destroy, :upvote, :downvote] 
before_action :authenticate_user!, except: [:index, :show] 

attr_accessor :username 

def index 
    @pins = Pin.all.order("created_at DESC") 
end 

def show 
end 

def new 
    @pin = current_user.pins.build 
end 

def create 
    @pin = current_user.pins.build(pin_params) 

    if @pin.save 
     redirect_to @pin, notice: "Fit was successfully created" 
    else 
     render 'new' 
    end 
end 

def edit 
end 

def update 
    if @pin.update(pin_params) 
     redirect_to @pin, notice: "Fit was successfully updated" 
    else 
     render 'edit' 
    end 
end 

def destroy 
    @pin.destroy 
    redirect_to root_path 
end 

def upvote 
    @pin.upvote_by current_user 
    redirect_to :back 
end 

private 

def pin_params 
    params.require(:pin).permit(:title, :description, :image) 
end 

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

end 

Voici mon index.html.haml

#pins.transitions-enabled 
- @pins.each do |pin| 
    .box.panel.panel-default 
     = link_to (image_tag pin.image.url), pin 
     %h2= link_to pin.title, pin 
     %p.user 
      Submitted by 
      = pin.user.username 

Mon schéma montre ceci pour les utilisateurs

add_index "pins", ["user_id"], name: "index_pins_on_user_id" 

create_table "users", force: true do |t| 
t.string "email",     default: "", null: false 
t.string "encrypted_password",  default: "", null: false 
t.string "reset_password_token" 
t.datetime "reset_password_sent_at" 
t.datetime "remember_created_at" 
t.integer "sign_in_count",   default: 0, null: false 
t.datetime "current_sign_in_at" 
t.datetime "last_sign_in_at" 
t.string "current_sign_in_ip" 
t.string "last_sign_in_ip" 
t.datetime "created_at" 
t.datetime "updated_at" 
t.string "username" 
end 

J'ai joint mon git juste au cas où vous auriez besoin de détails spécifiques https://github.com/thgilartlU/MyFitIdentity

+1

Vous devez restructurer votre question d'être un exemple minimal complet vérifiable: http://stackoverflow.com/help/mcve. À l'heure actuelle, toute personne qui pourrait vous aider devrait parcourir toute votre base de code pour savoir ce qui se passe. – JChrist

+1

@JChrist Merci pour le conseil! Je vais voir comment je peux nettoyer ça. – Ultralight

+0

Désolé. Je ne sais pas très bien, mais en surfant sur votre code, j'ai trouvé "attr_accessor: username" dans votre pins_controller. Ne semble avoir aucune référence sur votre schéma. Peut-être faire des "interférences"? – rfellons

Répondre

0

Supprimer

attr_accessor :username 

def username=(username) 
    @username = username 
end 

de votre fichier modèle user.rb, il bousille ActiveRecord

+1

Merci. J'apprécie ton aide! – Ultralight

0

Votre problème n'est pas haml c'est que le nom d'utilisateur que vous essayez d'afficher semble être vide. Votre structure de haml semble juste bien. Comme mentionné dans votre pin_params n'est pas autorisé username, alors assurez-vous de le permettre et de le sauvegarder dans la base de données. Que votre haml devrait fonctionner.

+0

J'ai mis à jour mon pins_controller inclure: \t def pin_params \t \t params.require (: pin) .permit (: titre,: description,: image: nom d'utilisateur) \t fin et après avoir vérifié si la l'utilisateur avait un nom d'utilisateur avec @u = Utilisateur.tout ce qu'il montre un nom d'utilisateur: created_at: "2017-02-06 18:47:44", updated_at: "2017-02-11 12:54:04", nom d'utilisateur: "ultralight"> Cependant mon index .html.haml n'affiche toujours pas le nom d'utilisateur de la personne qui a créé l'épingle. – Ultralight

+0

Vous devez vous assurer que vous pouvez accéder à ce nom d'utilisateur également dans votre console. pin.user.username. Le haml est bien. –