У меня есть две таблицы: клиенты и платежи.Сохранение внешнего ключа при обновлении в 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 %>
ожидания - что код на странице редактирования платежей? –
Редактирование оплаты
<% = оказывают 'форма' %> <% = link_to 'Show', @payment%> | <% = link_to 'Back', payments_path%> – SoSimpleМогу ли я получить код формы, я имею в виду –