我正在尝试实施一个“编辑”链接,该链接会显示一个表单来更改页面上显示的属性。
我的布局有:
<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"
参数。
答案 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) %>