Rails 4控制器/模型关联和白名单属性

时间:2014-01-16 10:46:29

标签: ruby-on-rails ruby-on-rails-4

我有一个客户端模型,其中包含以下行:

has_many :payments

和付款模式:

belongs_to :client

def generate_sepa

    sdd = SEPA::DirectDebit.new(
     name: 'name',
     bic: 'bic',
     iban: 'iban',
     creditor_identifier: 'identifier'
     )      

    SDD.add_transaction(
      name: @client.company,
      bic: @client.bic,
      iban: @client.iban,
      amount: self.amount,
      reference: self.payment_reference,
      remittance_information: self.remittance_information,
      mandate_id: self.mandate_id,
      mandate_date_of_signature: self.mandate_date_of_signature,
      local_instrument: 'CORE',
      sequence_type: self.sequence_type,
      requested_date: self.date_of_payment,
      batch_booking: self.batch_booking,)   

      sdd.to_xml    
end

在付款节目视图中,我有

<%= @payment.generate_sepa %>

和支付控制器

  def show
    @client = Client.find(:id => params[:client_id])
  end

不幸的是我收到以下错误:

  

未知密钥:id

@client = Client.find(:id => params[:client_id])

在客户控制器中我也有:

def client_params
      params.require(:client).permit(:id, :trading_name, :company_name, :owner, :main_contact_name,
        :email, :phone, :date_joined, :trading_street_one, :trading_street_two, :trading_town, :trading_county, :iban, :bic)
end

付款:

def payment_params
  params.require(:payment).permit(:client_id, :signup_fee, :monthly_fee, :date_of_payment, :payment_reference,
    :remittance_information, :mandate_id, :mandate_date_of_signature, :batch_booking, :sequence_type, :is_recurring, :is_onceoff)
end

我列入白名单的方式有问题吗?或者客户与付款之间的关联有问题,因为,说实话,我很难搞清楚出了什么问题。

修改

:当我创建新客户端时,client_id会传递给付款:

  def create
    @client = Client.new(client_params)

    respond_to do |format|
      if @client.save
        format.html { redirect_to new_payment_url(:client_id => @client.id) }
        format.json { render action: 'show', status: :created, location: @client }
      else
        format.html { render action: 'new' }
        format.json { render json: @client.errors, status: :unprocessable_entity }
      end
    end
  end

在付款_form部分我也有:

<%= f.hidden_field('client_id', :value => params[:client_id]) %>

以及其他表单字段。

2 个答案:

答案 0 :(得分:0)

def show
  @client = Client.find(params[:client_id])
end

不是吗?

答案 1 :(得分:0)

付款控制器/ show @client = Client.find(params[:id])无法使用。

使用

@payment= Payment.find(params[:id])
@client = @payment.client

因为您将付款ID传递给节目,而不是客户端ID。