Rails 5: пользователи (разработка) и управление несколькими таблицами на одной странице - PullRequest
0 голосов
/ 25 октября 2018

У меня это работало с использованием Laravel, но я сейчас пытаюсь собрать его в приложении Rails.

В основном я сейчас настроил новое приложение Rails со следующими шагами:

  1. rails new MyApp
  2. Установленное устройство
    • Добавить устройство в Gemfile
    • bundle
    • rails g devise:install
  3. Настройка пользовательских контроллеров devise и представлений
    • rails g devise:controllers users
    • rails g devise:views users
  4. Добавлены настраиваемые поля для пользователя devise и обновлено new / editviews

До этого момента все работает нормально.Я могу войти / выйти из системы и правильно общаться с базой данных.

ОБНОВЛЕНИЕ

Первая часть моего вопроса

КакОтвет, приведенный Сакибом Шахзадом, состоит в том, чтобы привести строку, относящуюся к пользователю, на определенную страницу.

Для всех интенсивных целей я настроил контроллер Home и связанный вид, который позволяет мне вводить всю связанную информацию.

Это вторая часть

Теперь я хочу создать для пользователя строку в отдельной таблице одновременно с созданием пользователя.

user.rb

class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable

  has_one :order
end

order.rb:

class Order < ApplicationRecord
  belongs_to :user
end

миграция заказа:

class CreateOrders < ActiveRecord::Migration[5.2]
  def change
    create_table :orders do |t|
      t.belongs_to :user
      ...
end

Итак, предположим, что я использую devise ... Как при создании пользователя можно создать необходимую строку вТаблица заказов, чтобы после регистрации они могли сразу увидеть информацию о своем заказе.(Очевидно, он будет просто отображать значения по умолчанию для полей, поскольку они еще ничего не редактировали)

Итак ...

  1. Человек заполняет регистрационную информацию на странице регистрации.
  2. Пользователь нажимает кнопку отправки
  3. В таблицах пользователей и заказов появляется новая строка для нового пользователя (создается пользователь и заказ пользователя)
  4. Человек немедленно перенаправляется на свою домашнюю страницу, котораяпоказывает их значения заказа

1 Ответ

0 голосов
/ 25 октября 2018

Итак, как я понял из вашего вопроса, вы хотите, чтобы каждый пользователь отображал на странице только его заказы, предпочтительно homepage.Это очень просто.

Создайте Home Controller и действие, вы можете назвать его как угодно dashboard / homepage / my_orders.

def homepage
  @order = current_user.order
end

И в вашемviews, home/homepage:

отображать любую информацию, которую вы хотите отобразить: Например:

if @order.present?
    @order.name
    link_to "Edit", edit_order_path
    link_to "Destroy",@order,method: :delete
else
    link_to "create order", new_order_path
end

new_order_path приведет пользователя к форме создания нового заказа (контроллер заказов)

В вашем orders_controller новом действии вместо инициализации

@order = Order.new

инициализируется как:

@order = current_user.order.new

Надеюсь, это устранит любые недоразумения.

ОБНОВЛЕНИЕ:

Если вы хотите, чтобы заказ создавался автоматически сразу при создании пользователя, вы можете сделать это с помощью методов after_commit.

InВы user.rb модель, создайте заказ после того, как пользователь создан:

after_create_commit {self.order.create(name: "somename",other_attribute: "value")}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...