2012-03-13 79 views
0

我试图实现一个'编辑'链接,调出一个窗体来更改页面上显示的属性。渲染的部分不接收参数

我的布局有:

<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' 

所以我觉得这是一个路由issue--,但我不知道如何解决它。我如何获取当前页面上的company_id参数,以便我正在加载的部分能够识别该参数?

我在/companies/1,但链接是companies/company_info_form,失去"company_id = 1"参数。

回答

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) %> 
+0

真棒!非常感谢你 - 非常棒。 – Lumen 2012-03-13 04:33:11

+0

ps。我也编辑了你的问题。你可以检阅我的编辑吗? – prasvin 2012-03-13 04:34:31