1

У меня есть две таблицы: клиенты и платежи.Сохранение внешнего ключа при обновлении в Rails

От клиентов я называю новая форма оплаты, как так:

<%= link_to "Add Payment", controller: 'payments', action: 'new', client_id: client.id %> 

Это работает нормально, но когда я пытаюсь обновить эту компенсацию, client_id поле не сохраняется. В контроллере платежей у меня есть:

def update 
    @payment.client_id = @payment.client.id 

    respond_to do |format| 
     if @payment.update(payment_params) 
     format.html { redirect_to @payment, notice: 'Payment was successfully updated.' } 
     format.json { head :no_content } 
     else 
     format.html { render action: 'edit' } 
     format.json { render json: @payment.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

Я думал, что это будет работать, потому что в расчетах показывают действие, которое я называю объект клиента с

@client = @payment.client 

Любые идеи, почему подобный вызов не работает в обновлении?

РЕДАКТИРОВАТЬ

, чтобы избежать путаницы, что первая линия является частью следующей таблице:

<tbody> 
    <% @clients.each do |client| %> 
     <tr> 
     <td><%= client.company_name %></td> 
     <td><%= client.owner %></td> 
     <td><%= client.main_contact_name %></td> 
     <td><%= client.phone %></td> 
     <td> 
      <ul id="options_list"> 
      <li><%= link_to "Add Payment", controller: 'payments', action: 'new', client_id: client.id %></li> 
      <li><%= link_to "View/Manage Payments", controller: 'clients', action: 'show_payments', id: client %></li> 
      <li><%= link_to "XML Document", controller: 'clients', action: 'show_sepa', id: client %></li> 
      </ul> 
     </td> 
     <td> 
      <ul id="options_list"> 
      <li><%= link_to 'Show', client %></li> 
      <li><%= link_to 'Edit', edit_client_path(client) %></li> 
      <li><%= link_to 'Destroy', client, method: :delete, data: { confirm: 'Are you sure?' } %></li> 
      </ul> 
     </td> 
     </tr> 
    <% end %> 
    </tbody> 

EDIT 2:

Запрашиваемые код (платежи образуют частичные)

<%= form_for @payment do |f| %> 
    <% if @payment.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@payment.errors.count, "error") %> prohibited this payment from being saved:</h2> 

     <ul> 
     <% @payment.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="actions"> 
    <%= f.submit %> 
    </div> 

    <fieldset id="form"> 
    <span><legend>Fill In The Form Below</legend></span> 

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

    <div id="field"> 
     <%= f.label :signup_fee %> 
     <%= f.text_field :signup_fee %> 
    </div> 

    <div id="field"> 
     <%= f.label :monthly_fee %> 
     <%= f.text_field :monthly_fee %> 
    </div> 

    <div id="field"> 
     <%= f.label :date_of_payment, 'Payment Start Date' %> 
     <%= f.date_select(:date_of_payment, :order => [:year, :month, :day]) %> 
    </div> 

    <div id="field"> 
     <%= f.label :payment_reference %> 
     <%= f.text_field :payment_reference %> 
    </div> 

    <div id="field"> 
     <%= f.label :remittance_information, 'Remittance Information (optional)' %> 
     <%= f.text_field :remittance_information %> 
    </div> 

    <div id="field"> 
     <%= f.label :mandate_id, "Mandate ID" %> 
     <%= f.text_field :mandate_id %> 
    </div> 

    <div id="field"> 
     <%= f.label :mandate_date_of_signature %> 
     <%= f.date_select(:mandate_date_of_signature, :order => [:year, :month, :day]) %> 
    </div> 

    <div id="field"> 
     <%= f.label 'Type of Payment:' %> 
     <%= f.label :is_recurring, 'Recurring' %> 
     <%= f.check_box :is_recurring %> 
     <%= f.label :is_onceoff, 'Once Off' %> 
     <%= f.check_box :is_onceoff %> 
    </div>  

    <div id="field"> 
     <%= f.label :batch_booking %> 
     <%= f.check_box :batch_booking %> 
    </div> 

    </fieldset> 
<% end %> 
+0

ожидания - что код на странице редактирования платежей? –

+0

Редактирование оплаты

<% = оказывают 'форма' %> <% = link_to 'Show', @payment%> | <% = link_to 'Back', payments_path%> – SoSimple

+0

Могу ли я получить код формы, я имею в виду –

ответ

0

(отредактирован для дополнительной информации)

<%= link_to "Add Payment", new_client_payment_path(client) %> 

это будет работать, только если ваши маршруты настроить вложенные:

resources :clients do 
    resources :payments 
end 

вы должны быть в состоянии удалить эту строку - это не помогает вам

@payment.client_id = @payment.client.id 
+0

Это часть таблицы. Я добавил полный код к вопросу. – SoSimple

+0

, если вы просто сделаете new_client_payment_path (клиент), рельсы должны позаботиться об остальном ... у вас есть свои сильные параметры payment_params allow! правильно настроены для всех правильных атрибутов? –

+0

Спасибо, что попробую :) – SoSimple

Смежные вопросы