Отображается частично не получая params - PullRequest
0 голосов
/ 13 марта 2012

Я пытаюсь реализовать ссылку "изменить", которая вызывает форму для изменения отображаемого атрибута на странице.

В моем макете:

<div id="company_info">
  <%= yield :company_info %>
</div>
<div id="edit_company_info">
</div>

В моем представлении есть:

<%= content_for :company_info do %>
<%= render 'company_info' %>
<%= link_to "Edit", 'company_info_form', :class => 'btn btn-mini', :method => :get, :remote => true %>

Мой контроллер имеет:

 def company_info_form
   @company = Company.get(params[:id])

   respond_to do |format|
      format.js
   end
 end

Мой файл company_info_form.js.erb имеет:

$('#edit_company_info').html("<%= escape_javascript(render "company_info_form") %>");

После нажатия на ссылку мой сервер показывает:

Started GET "/companies/company_info_form" for 127.0.0.1 at 2012-03-12 20:19:13 -0700
Processing by CompaniesController#show as JS
Parameters: {"id"=>"company_info_form"}
Completed 500 Internal Server Error in 1ms

RuntimeError (Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id):
app/controllers/companies_controller.rb:9:in `show'

Так что я думаю, что это проблема маршрутизации, но я понятия не имею, как ее исправить.Как я могу получить параметр company_id, который находится на моей текущей странице, для распознавания по той части, которую я загружаю?

Я на /companies/1, но ссылка на companies/company_info_form, теряет параметр "company_id = 1".

1 Ответ

2 голосов
/ 13 марта 2012

Да, проблема связана с вашими маршрутами и ссылкой, на которую вы указали.

Первая проблема может быть установлена, поскольку она говорит Processing by CompaniesController#show as JS. Таким образом, он на самом деле собирается companies#show, где он пытается найти компанию на основе идентификатора. Но, так как правильное значение id не передается, оно выдает ошибку.

Вторая проблема связана с тем, что ваша ссылка на companies/company_info_form, как вы указали, поскольку вы использовали 'company_info_form' в качестве пути в вашей ссылке для редактирования. И вы еще не передали текущую компанию по ссылке.

Поскольку вы не опубликовали свой файл маршрутов, который вы должны иметь, поскольку вы определили потенциальную проблему с маршрутами, я представлю свой собственный.

В ваших маршрутах:

resources :companies do
  member do
    get 'company_info_form'
  end
end

Это даст вам

company_info_form_company GET    /companies/:id/company_info_form(.:format) companies#company_info_form

Тогда вы можете предоставить ссылку как:

<%= link_to "Edit", company_info_form_company_path(@company) %>
...