link_to嵌套资源路由找不到ID

时间:2018-11-17 12:43:53

标签: ruby-on-rails ruby

我的用户名中的link_to正在创建错误,我不知道为什么。

错误:

没有ID找不到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

我尝试加载/ settings页面时出错:

这是我使用时的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​​是从stripe_account中找到API ID,其中包含来自stripe的大量信息...如果是的话,有没有办法我可以使用表中的ID?

2 个答案:

答案 0 :(得分:1)

如果您不想将变量设置为current_user的stripe帐户(请求中没有id参数),则应该可以执行@stripe_account = current_user.stripe_account。而且我建议您使用@user = current_user@user_id = current_user.id,因为这样会混淆名为@user的具有整数值的变量。

定义“ StripeAccount属于用户”时,默认情况下(按照惯例),ActiveRecord在user_id表上查找stripe_accounts列。

我建议您阅读此https://guides.rubyonrails.org/association_basics.html。它说明了所有类型的关联,即使它们不是常规的(不同的类名,没有_id列等),您也可以配置它们。

答案 1 :(得分:0)

经过多次尝试,我有了一种工作方式。我不确定这样做的效率如何,我将探索更多选择。

这最终完成了我想要的工作:

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

密钥使用的是“ .find_by”而不是“ .find”。这样可以使link_to正常运行并转到正确的位置。