渲染部分未接收参数

时间:2012-03-13 03:53:33

标签: ruby-on-rails-3 jquery routes partial-views

我正在尝试实施一个“编辑”链接,该链接会显示一个表单来更改页面上显示的属性。

我的布局有:

<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 个答案:

答案 0 :(得分:2)

是的,问题在于您的路线以及您指出的链接。

第一个问题可以确定为Processing by CompaniesController#show as JS。所以,它实际上是companies#show,它试图找到一个基于id的公司。但是,由于没有传递正确的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) %>