Как получить адрес электронной почты на simple_form из модели кошелька?[сложное отношение] - PullRequest
0 голосов
/ 07 февраля 2019

У меня проблема.Я пытаюсь получить адрес электронной почты от wallet_id, который сначала не связывает это отношение с участником, а сначала с учетной записью инвестора, как в примере ниже.

member.rb

class Member < ActiveRecord::Base
  has_one :investor_account, dependent: :destroy
end

investor_account.rb

class InvestorAccount < ActiveRecord::Base
  belongs_to :member
  has_many :wallets, dependent: :destroy
end

wallet.rb

class Wallet < ActiveRecord::Base
  belongs_to :investor_account
end

top_up.rb

belongs_to :wallet

/ top_ups / _form.html.slim

= simple_form_for [:transaction, @top_up] do |f|
  .form-group
    = f.input :wallet_id, collection: @wallet, input_html: { class: 'form-control' }, include_blank: "Select..."
  .form-group
    = f.input :amount, input_html: { min: 0, value: 0 }

/ controllers / top_ups_controller.rb

def new
  @top_up = TopUp.new
  @wallet = Wallet.joins(:investor_account).where(investor_accounts: {approval_status: 'approved'})
end

Данные по «f.input: wallet_id ....»был обнаружен, но это не электронная почта участника, вместо этого он показывает #<Wallet:0x007fd6d795e808> на всех выпадающих кошельках, ранее я также писал код, как показано ниже.

= f.input :wallet_id, collection: @wallet, :id, :email, input_html: { class: 'form-control' }, include_blank: "Select..."

Но это приводило к возникновению проблемы с электронной почтой, не найденной.У меня был вопрос, как передать члену в этой переменной @wallet = ..., чтобы член электронной почты отображался в моей форме?Есть ли лучший способ получить это?

1 Ответ

0 голосов
/ 07 февраля 2019

Вы можете использовать label_method и value_method параметры ( документы ):

= f.input :wallet_id, collection: @wallet, value_method: :id, label_method: :email, input_html: { class: 'form-control' }, include_blank: "Select..."

Также, если вам нужны только идентификатор и адрес электронной почты, нет необходимости извлекать вседругие данные из БД можно использовать pluck:

# controller
def new
  @top_up = TopUp.new
  @wallet = Wallet.joins(:investor_account).where(investor_accounts: {approval_status: 'approved'}).pluck(:id, :email)
end

# form
= f.input :wallet_id, collection: @wallet, value_method: :first, label_method: :last, input_html: { class: 'form-control' }, include_blank: "Select..."
...