У меня есть форма, где пользователи ищут конкретный счет по некоторым атрибутам этого счета, а именно «Номер конгресса», «Тип счета» и «Номер счета», как в 114-HR-67.Я хочу «показать» соответствующий счет, но для этого я должен получить соответствующую модель счета в отдельном действии, которое я назвал «find_by_attributes».Внутри этого действия я выполняю:
@bill = Bill.find_by( params ).first
, который корректно получает соответствующий идентификатор счета.
Теперь я просто хочу перенаправить на метод "показа" этого счета, как в URL
".../bills/[@bill.id]"
На данный момент в конце моего действия "find_by_attributes" я делаю
redirect_to bills_path(@bill)
, который корректно загружает show.html.erb с @bill, но не изменяетсяURL-адрес (URL-адрес по-прежнему показывает действие «find_by_attributes», за которым следует длинная строка запроса вместо чистой »/bills/[:bill_id]".
Как я могу реструктурировать свой код для достиженияаккуратный редирект, который я желаю?
Полный код ниже:
ФОРМА
<%= form_tag("bills/find_or_create", :method => :get ) do |f| %>
<%# render 'shared/error_messages', object: f.object %>
<%= fields_for :bill do |ff| %>
<%= ff.label :congress, 'Congress (i.e. 114)' %>
<%= ff.number_field :congress, class: 'form-control' %>
<%= ff.select :bill_type, options_for_select(
[['House of Representatives', 'hr'],
['Senate', 's'],
['House Joint Resolution', 'hjres'],
['Senate Joint Resolution', 'sjres'],
['House Concurrent Resolution', 'hconres'],
['Senate Concurrent Resolution', 'sconres'],
['House Resolution', 'hres'],
['Senate Resolution', 'sres']]
)
%>
<%= ff.label :bill_number, 'Bill number (i.e. 67)' %>
<%= ff.number_field :bill_number, class: 'form-control' %>
<% end %>
<%= submit_tag "Submit", class: "btn btn-primary" %>
<% end %>
ДЕЙСТВИЯ КОНТРОЛЛЕРА
def find_by_attributes
@bill = Bill.where(bill_params).first_or_create(bill_attributes)
redirect_to bills_path(@bill)
end
def show
puts bill_params
if params[:bill]
@bill = Bill.where(bill_params).first_or_create do |bill|
bill.attributes = bill_attributes
end
else
@bill = Bill.find(params[:id])
end
@subjects = Subject.where("bill_id = ?", @bill[:id])
@bill_comments = Comment.where("target = ?", @bill[:id])
end
ФАЙЛ МАРШРУТОВ
...
resources :bills do
get :find_by_attributes
end
...
РЕДАКТИРОВАТЬ
Я использую драгоценный камень turbolinks в моем приложении рельсов.