2017-02-11 13 views
0

Хорошо, наверное, действительно прямой вопрос ответить, я думаю. Я, кажется, нарушил функцию моего приложения, в котором отображается имя пользователя, отправившего сообщение (в моем случае «pin»).Post.Username не отображается внутри haml?

Все это происходило примерно в то время, когда я добавлял имена пользователей в базу данных (devise), поскольку ранее я только показывал адреса электронной почты и чувствовал, что это не совсем то, что я хотел.

Tl; др: = pin.user.username (приложение/просмотров/контакты/index.html.haml) Не показывать имя человека, отправившего сообщение. Однако он будет отображать электронную почту с pin.user.email.

Вот мой PinsController (Pin в моем случае это сообщение в завещанию)

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 

Вот мой 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 

Моя схема показывает, что это для пользователей

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 

Я приложил свой git просто к вам, вам нужны конкретные детали. https://github.com/thgilartlU/MyFitIdentity

+1

Вы должны перестроить свой вопрос, чтобы быть минимальным полным проверяемым пример: http://stackoverflow.com/help/mcve. Прямо сейчас, любой, кто мог бы вам помочь, должен был пройти всю вашу базу кода, чтобы узнать, что происходит. – JChrist

+1

@ JChrist Спасибо за подсказку! Я посмотрю, как я могу это очистить. – Ultralight

+0

Извините. Я плохо знаю haml, но, серфинг по вашему коду, я нашел «attr_accessor: username» в вашем pins_controller. Кажется, нет никакой ссылки на вашу схему. Может быть, некоторые «помехи»? – rfellons

ответ

0

Удалить

attr_accessor :username 

def username=(username) 
    @username = username 
end 

из вашего файла модели user.rb, он путает ActiveRecord

+1

Спасибо. Я ценю вашу помощь! – Ultralight

0

Ваша проблема не в том, что имя пользователя, которое вы пытаетесь отобразить, кажется пустым. Структура haml выглядит просто замечательно. Как указано в вашем pin_params, не разрешено username, поэтому убедитесь, что разрешили его и сохранили в БД. Чем твоя хамль должна работать.

+0

Я обновил свой pins_controller включать: \t Защиту pin_params \t \t params.require (: контактный) .permit (: название,: описание,: изображения,: имя пользователя) \t конец и после проверки, если у пользователя было имя пользователя с @u = Пользователь.все это показывает имя пользователя: created_at: "2017-02-06 18:47:44", updated_at: "2017-02-11 12:54:04", имя пользователя: "ultralight"> Однако мой индекс .html.haml по-прежнему не показывает имя пользователя, создавшего контакт. – Ultralight

+0

Вы должны убедиться, что вы можете получить доступ к этому имени, как это также в консоли. pin.user.username. Хэмл в порядке. –