Хорошо, так что, наверное, очень простой вопрос, на который я, наверное, отвечу. Я, кажется, сломал функцию моего приложения, которая отображает имя пользователя, который отправил сообщение (в моем случае «pin»).
Все это произошло примерно в то время, когда я добавил имена пользователей в базу данных (разработал), так как ранее я только отображал адреса электронной почты и чувствовал, что это не совсем то, что я хотел.
Tl; dr: = 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
Я прикрепил мой мерзавец, только если вам нужны конкретные детали
https://github.com/thgilartlU/MyFitIdentity
Удалить
attr_accessor :username
def username=(username)
@username = username
end
от твоего user.rb
файл модели, он портит ActiveRecord
Ваша проблема не в том, что хамл, а в том, что имя пользователя, которое вы пытаетесь отобразить, кажется пустым. Ваша структура haml выглядит просто отлично.
Как уже упоминалось в вашем pin_params
не разрешено username
, поэтому не забудьте разрешить и сохранить его в БД. Чем ваш хамл должен работать.