ОБНОВЛЕНИЕ 2
То, что я до сих пор делал, это рельсы генерируют миграцию add_user_reference_to_products
Затем я сделал
класс AddUserReferenceToProducts
Но я получаю PG :: DuplicateColumn: ERROR: столбец "user_id" отношения "request_items" уже существует.
Когда я ссылаюсь на это (как @ products.user_id) в представлении, оно пустое.Я пытался создать новый продукт, но он не работает.Что я должен делать, как я просто не могу, для моей жизни сейчас, выяснить, что делать сейчас.
ОБНОВЛЕНИЕ
Я хочу сделатьчто-то вроде этого @ products.users.username (если есть другой способ сделать это, пожалуйста, сообщите мне), чтобы отобразить имя пользователя для продукта, который он создал.
В настоящее время я не изменил код, как указано ниже, но если потребуется дополнительная информация, пожалуйста, сообщите мне.Кроме того, если вы сможете предоставить пошаговый процесс, я был бы признателен.
Ответ при условии, что Клайд не работает для меня (неопределенный метод "имя пользователя").
ВОПРОС: Как связать пользовательский контроллер с контроллером продукта, несмотря на то, что уже определено это отношение в модели?(Пользователь может создавать много продуктов, и продукт принадлежит пользователю)
У меня есть веб-сайт, где пользователи могут создавать продукты.Теперь у этих пользователей также есть страница профиля.Я хочу знать, возможно ли иметь его, чтобы, когда пользователь создает продукт, и я щелкаю сам продукт, он показывает, какой пользователь его создал, и когда я щелкаю имя пользователя, он направляет на страницу своего профиля.
В настоящее время единственное, что не работает, это то, что имя пользователя не отображается в созданном ими продукте, маршруты и все остальное работает.
Для пользователей соответствующий код:
class UsersController < ApplicationController
def index
@users = User.all
end
def show
@users = User.find(params[:id])
end
end
Схема
create_table "users", force: :cascade do |t|
t.string "email"
t.string "username"
t.string "encrypted_password"
t.string "description"
t.string "address"
t.string "phone_number"
end
Для продуктов:
class ProductsController < ApplicationController
def index
@products = Product.all
end
def new
@products = Product.new
end
def create
params[:products][:user_id] = current_user.id
@products = products.new(products_params)
end
def edit
@products = Product.find(params[:id])
end
def update
@products = Products.find(params[:id])
@products.update_attributes!(products_params)
flash[:notice] = "#{@products.name} has been succesfully updated."
redirect_to show_my_products_path
end
def destroy
@products = Product.find(params[:id])
@products.destroy
flash[:notice] = "Your product '#{@products.name}' has been deleted."
redirect_to show_my_products_path
end
def show
@products = Product.find(params[:id])
end
end
Схема
create_table "products", force: :cascade do |t|
t.string "name", default: "", null: false
t.string "description"
t.string "quantity"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "user_id"
end
Для страницы шоу продуктов, это по существуотображает информацию о продукте.Я хочу добавить одну строку:
<%= link_to "#{user.username}", users_show_path_url(user), class: 'link_to' %>
Где, если вы щелкнете по этой ссылке на странице продукта, которую создал пользователь, она перейдет на страницу его профиля.Тем не менее, я получаю ошибку, когда на странице show.html.erb для продуктов:
undefined method `username' for nil:NilClass
ИЛИ
Couldn't find User with 'id'= ....
Я думаю, я не слишком уверен, как я могусвязать пользователя, который создал свой продукт, и отобразить его имя пользователя для этого конкретного продукта.Я попытался добавить:
@users = User.all
@users = User.find(params[:id])
К контроллеру продукта шоу.
Кроме того, это модель:
class User < ActiveRecord::Base
has_many :products
end
class Product < ActiveRecord::Base
belongs_to :user
end
Я намеренно пропустил некоторыекод и выбрал наиболее подходящий код, но если вам требуется больше кода, пожалуйста, сообщите мне.
То, что я хочу, это когда кто-то щелкает продукт, он может видеть, какой пользователь создал его, и видеть свое имя пользователя и, следовательно, щелкнуть по нему, чтобы перейти к профилю пользователя.Единственная ссылка между продуктом и пользователями - это user_id в таблице продукта.Поэтому, когда продукт создается, к этому элементу привязывается user_id.