【问题标题】:How can I access 1 model params from another model's views?如何从另一个模型的视图访问 1 个模型参数?
【发布时间】:2020-11-18 01:28:13
【问题描述】:

所以我有一个视图,我将在“购买”中输入一些信息,您可以说,实际型号名称是“减免”。我想要的是在我的 new_remission_path(@client) 中显示 url 上的 id 所属的客户端信息。在 url 上,我得到“/remissions/new.3”,所以客户端的 ID 是 3,但它不会让我显示客户端模型信息中的任何内容。我已经在“remissions”表中添加了一个外键“client_id”,但我不知道是否需要其他任何东西才能从实际的“new_remission_path(@catalog)”视图访问客户端模型参数

【问题讨论】:

  • 你在remission模型中添加belongs_to了吗?
  • 如果您想显示来自用户的数据,您必须在new 操作中将用户存储在RemissionsController 的实例变量中。 @user = User.find(params[:user_id]) 之类的东西或用户 ID 参数的名称。然后在您的视图中,您将可以访问@user
  • @Shiko 是的,我已经有我做了'belongs_to :client'
  • 我这样做了,我得到了这个错误'找不到没有 ID 的客户'

标签: html ruby-on-rails postgresql


【解决方案1】:

因此,通常您可能希望在客户端内嵌套缓解路线。您可以在 config/routes.rb 中执行此操作。

resources :clients do
  resources :remissions, shallow: true
end

有关嵌套路由的更多信息,请参阅https://guides.rubyonrails.org/routing.htmlshallow: true 为您提供了一种在显示、编辑、更新和销毁操作中访问减免的方法,而无需指定它所属的客户端。

这将为您提供new_client_remission_path(@client),您将在其中传递客户端。然后,您的新操作将在您的 RemissionsController (app/controllers/remissions_controller) 上执行,您可以通过以下方式获取客户端:

class RemissionsController < ApplicationController
  def new
    @client = Client.find(params[:client_id])
    @remission = @client.remissions.build
  end
end

通常您可能只调用params[:id],但嵌套路由发送:client_id

您的模型中也需要几个关系。

app/models/client.rb

class Client < ApplicationRecord
  has_many :remissions, dependent: :destroy

end

app/models/remission.rb

class Remission < ApplicationRecord
  belongs_to :client

end

在您看来,您应该能够调用@client 从该记录中获取信息。

【讨论】:

  • 让我试试这个,我会回复你的,谢谢
  • 所以现在我收到此错误 'undefined method `client_remissions' for #<0x000000000e635e58>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-24
  • 1970-01-01
  • 2012-12-30
  • 1970-01-01
  • 2017-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多