ссылка на вложенный ресурс маршрута не может найти идентификатор - PullRequest
0 голосов
/ 17 ноября 2018

link_to в моем имени пользователя создает ошибку, и я не знаю, почему.

Ошибка:

Не удалось найти StripeAccount без идентификатора

Контроллер: это внутри отдельного контроллера от контроллера StripeAccount

def settings
    @user = current_user.id
    @stripe_account = StripeAccount.find(params[:stripe_account_id])
  end

Я попытался "@stripe_account = StripeAccount.find (params [: id])" с той же ошибкой

Вид:

<%= link_to user_stripe_account_path(@user, @stripe_account) %>

Я пытался использовать @ stripe_account.id и т. Д.

Модели:

stripe_account::

  belongs_to :user, optional: true

user::

  has_one :stripe_account

Маршруты:

  resources :users do
    resources :stripe_accounts
  end

Ошибка при попытке загрузить страницу / настройки:

Вот CMD, когда я использую: @stripe_account = StripeAccount.find (params [: stripe_account_id])

app/controllers/dashboard_controller.rb:18:in `settings'
Started GET "/settings" for 127.0.0.1 at 2018-11-17 06:27:04 -0500
Processing by DashboardController#settings as HTML
  User Load (0.3ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ?  [["id", 2], ["LIMIT", 1]]
  ↳ app/controllers/dashboard_controller.rb:17
Completed 404 Not Found in 3ms (ActiveRecord: 0.3ms)



ActiveRecord::RecordNotFound (Couldn't find StripeAccount without an ID):

app/controllers/dashboard_controller.rb:18:in `settings'

Когда я использую @stripe_account = StripeAccount.find (params [: id])

ActiveRecord::RecordNotFound (Couldn't find StripeAccount without an ID):

app/controllers/dashboard_controller.rb:18:in `settings'
Started GET "/settings" for 127.0.0.1 at 2018-11-17 06:28:21 -0500
Processing by DashboardController#settings as HTML
  User Load (0.3ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ?  [["id", 2], ["LIMIT", 1]]
  ↳ app/controllers/dashboard_controller.rb:17
Completed 404 Not Found in 3ms (ActiveRecord: 0.3ms)



ActiveRecord::RecordNotFound (Couldn't find StripeAccount without an ID):

app/controllers/dashboard_controller.rb:18:in `settings'

Что я делаю неправильно?

Единственная проблема, о которой я могу думать, это то, что rails / ruby ​​находит идентификатор API из stripe_account, который содержит кучу информации из stripe ... если так, есть ли способ, которым я могу конкретно заявить, используя ID из таблицы?

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Вы должны быть в состоянии сделать @stripe_account = current_user.stripe_account, если не хотите устанавливать переменную для учетной записи чередующейся учетной записи current_user (у вас нет параметра id в запросе).И я рекомендую вам использовать @user = current_user или @user_id = current_user.id, так как непонятно читать переменную с именем @user, имеющую целочисленное значение.

Когда вы определяете "StripeAccount assign_to User", по умолчанию (этосоглашение) ActiveRecord ищет столбец user_id в таблице stripe_accounts.

Я бы порекомендовал вам прочитать это https://guides.rubyonrails.org/association_basics.html. Он объясняет все типы ассоциаций, и вы можете настроить свои ассоциации, даже еслиони не являются обычными (разные имена классов, нет столбца _id и т. д.).

0 голосов
/ 18 ноября 2018

После многих попыток у меня появился один способ работать.Я не уверен, насколько это эффективно, и я буду исследовать больше вариантов.

Это сработало так, как я хотел:

@stripe_account = StripeAccount.find_by(params[:id])

Ключ использовал ".find_by", а не ".find".Это позволяет link_to работать и перейти в нужное место.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...