#ruby-on-rails #querying
#ruby-on-rails #выполнение запросов
Вопрос:
Я новичок в Rails, и у меня есть две модели (Ticket, User). У одного билета есть один пользователь — у одного пользователя есть множество билетов.
Я хотел бы отобразить «имя пользователя заявки» на странице обзора..
Я уже настроил свои модели и ассоциации. Следующий код должен отображать таблицу из 3 столбцов с именем пользователя посередине, но я получаю сообщение об ошибке:(
«неопределенный метод `users’ для …»
Я перехожу из C #, используя Entity Framework.. Я думал, что RoR понимает выражение «article.user.firstname»
<% @tickets.each do |article| %>
<tr>
<td class="cell"><%= article.title %></td> //fine
<td class="cell"><%= article.user.firstname %></td> // le error :(
<td class="cell"><%= article.description %></td> //fine
</tr>
<% end %>
Кто-нибудь может показать мне, как это заархивировать?
User.rb
class User < ActiveRecord::Base
has_many :tickets, dependent: :destroy
end
Ticket.rb
class Ticket < ActiveRecord::Base
belongs_to :user
end
ticket_controller.rb
class TicketsController < ApplicationController
def index
@tickets = Ticket.all.includes(:user)
end
def new
@users = User.all
end
def create
@ticket = Ticket.new(article_params)
@ticket.save
redirect_to @ticket
end
def show
@ticket = Ticket.find(params[:id])
end
private
def article_params
params.require(:ticket).permit(:title, :description)
end
end
Обновить:
Мне пришлось переопределить свою модель с помощью «rails generate model Ticket title:строковое сообщение:string user_id». После этого я запустил «rake db: migrate» (после удаления этой таблицы, в противном случае я получил сообщение об ошибке).
Затем я устанавливаю ассоциации, записывая «belongs_to :user» в ticket.rb и «has_many :tickets» в мой user.rb-файл.
Комментарии:
1. Можете ли вы опубликовать запрос, используемый для получения @tickets
2. Можете ли вы также опубликовать свои ассоциации с моделями. Это aritcle.user.firstname ?
3. разве так не должно быть
article.user.firstname
?4. Я попробовал article.user.firstname .. та же ошибка:(
5. мой запрос: @tickets = Ticket.all.includes(:user)
Ответ №1:
Можете ли вы опубликовать свою таблицу пользователей, таблицу заявок и контроллер заявок. чтобы проверить, нет ли у вас синтаксической ошибки. Вы говорите, что у билетов есть только 1 пользователь, и у вас есть article.users, а не article.user добавить пользователя в
def article_params
params.require(:ticket).permit(:title, :description,:user_id)
end
Можете ли вы опубликовать форму для использования, если вы получаете текущий идентификатор пользователя в форме
при переносе таблицы заявок у вас есть t.целое число :user_id
Проблема, которую я замечаю, заключается в том, что при создании списка пользователь ищет в этой таблице tickets, а не в таблице Users.Вот почему вы не выдаете ошибку при использовании только article.user
на консоли попробуйте User.all и посмотрите, есть ли у вас user, а затем попробуйте то же самое с Ticket.ВСЕ
Комментарии:
1. тикет: идентификатор, заголовок: строка, сообщение:строка, пользователь: int, created_at, updated_at.
2. идентификатор пользователя: int, имя_аккаунта:строка, firstname: строка, lastname: строка, created_at, updated_at
3. та же ошибка: неопределенный метод `firstname’ для nil:NilClass
4. какой тип ошибки вы получаете, если используете это <%= article.user%>
5. вы заставляете пользователей создавать?
Ответ №2:
В комментариях вы упоминаете, что получаете ошибку в строках «неопределенный метод `firstname’ для nil: NilClass». Это означает, что вашему билету не назначен пользователь, поэтому пользователь равен нулю. Вы получаете эту ошибку, потому что пытаетесь обрабатывать nil как пользователя.
Комментарии:
1. но в таблице «tickets», в столбце «user», есть идентификатор пользователя (1) .. 🙁 .. Я не понимаю, почему Ruby говорит user = nil