Это моя форма:
<table>
<tbody>
<% form_for :HhActiveCarrier, @carriers, :url => { :action => "update" } do |f| %>
<% for carrier in @carriers %>
<tr>
<%= render :partial => "summary_detail", :locals => {:carrier => carrier, :f => f} %>
</tr>
<% end %>
</tbody>
</table>
<%= submit_tag "Update" %>
<% end %>
С моим частичным:
<td class="tn"><%= h(carrier.name.to_s()) -%></td>
<td class="sc"><%= h(carrier.country.to_s()) -%></td>
<td class="sc"><%= select(:carrier, "country", @countries) -%></td>
Это контроллер, в котором я определяю переменные:
class ActiveCarriersController < ApplicationController
def index
@carriers = HhActiveCarrier.find(:all)
for carrier in @carriers
country = carrier["country"]
if country.nil?
carrier["country"] = "none"
end
end
@countries = ["USA", "UK", "Canada"]
end
def update
carriers = HhActiveCarrier.find(:all)
for carrier in carriers
carrier.update_attributes(params[:country])
end
redirect_to( :action => "index" )
end
Я хочу, чтобы после нажатия кнопки «Обновить» я хотел, чтобы новая страна, выбранная из раскрывающегося списка, была добавлена в модель HHActiveCarrier. С кодом, который у меня есть сейчас, я получаю эту ошибку:
OCIError: ORA-00904: «ID»: неверный идентификатор: ОБНОВЛЕНИЕ
hh_active_carriers SET name = 'AT & T', страна = ноль ГДЕ id = ноль
Как бы я обновил атрибуты this? Я использую рубин на рельсах 2.3.8.
Edit:
Добавлен хеш параметров из журнала разработки:
параметры: {"commit" => «Обновить», «carrier» => {«страна» => «США»},
"action" => "update", "controller" => "active_carriers"}
content_type: #
принимает: [#, #, #]
raw_post:
"Носитель% 5Bcountry% 5D = США и носитель% 5Bcountry% 5D = США и носитель% 5Bcountry% 5D = США и носитель% 5Bcountry% 5D = США и фиксация = Update"
query_parameters: {}
request_parameters: {"commit" => "Update", "action" => "update",
"carrier" => {"страна" => "США"}, "controller" => "active_carriers"}
Edit3:
Форма:
<table>
<tbody>
<% form_for :HhActiveCarrier, :url => { :action => "update" } do |f| %>
<% for carrier in @carriers %>
<tr>
<%= render :partial => "layouts/summary_detail", :locals => {:carrier => carrier, :f => f} %>
</tr>
<% end %>
</tbody>
</table>
<%= submit_tag "Update" %>
<% end %>
Частичная:
<td class="tn"><%= h(carrier.name.to_s()) %></td>
<td class="sc"><%= h(carrier.id.to_s()) %></td>
<td class="sc"><%= h(carrier.country.to_s()) %></td>
<td class="sc"><%= f.collection_select :country, HhActiveCarrier::COUNTRIES, :to_s, :to_s %></td>
Контроллер:
class ActiveCarriersController < ApplicationController
def index
@carriers = HhActiveCarrier.find(:all)
for carrier in @carriers
country = carrier["country"]
if country.nil?
carrier["country"] = "none"
end
end
end
def update
#update code
redirect_to( :action => "index" )
end
end