2015-05-28 34 views
1

我正在做一个简单的CRUD,并且我有一个问题edit/update。这是我的形式看起来像:Rails 4编辑表单无法找到路径

= simple_form_for @receipt do |f| 
    = render 'shared/error_messages', object: @receipt 
    = f.input :purchase_date, as: :string, input_html: {'data-provide' => 'datepicker'} 
    = f.input :amount, as: :string, input_html: {'data-provide' => 'datepicker'} 
    = f.association :store 

因此,对于新的行动我有这样的观点:

h2 Create new receipt 
    = render 'form' 

我初始化的新控制器的动作我@receipt实例变量。然而,当我尝试做编辑,这是编辑视图的内容:

h2 Edit receipt 
    = render 'form' 

我得到这个错误:

undefined method `receipt_path' for #<#<Class:0x007f943b6f3750>:0x007f943d5ce5d0> 

form部分的第一道防线。这是我的路什么样子:

resource :receipts do 
    collection do 
     get :index 
    end 
end 

有关路由的奇怪的是,在该情况下,我没有添加get :index,对指数的路线不会得到产生,这是我rake routes与指数的输出目前在资源收集下:

receipts GET /receipts(.:format)  receipts#index 
       POST /receipts(.:format)  receipts#create 
new_receipts GET /receipts/new(.:format) receipts#new 
edit_receipts GET /receipts/edit(.:format) receipts#edit 
       GET /receipts(.:format)  receipts#show 
       PATCH /receipts(.:format)  receipts#update 
       PUT /receipts(.:format)  receipts#update 
       DELETE /receipts(.:format)  receipts#destroy 

我的意思是我可以通过网址编辑和新的形式,这将使其工作,我猜。它曾经是多余的。

我的问题是我在做什么错在这里,这是我第一个使用rails 4的项目,这是一个rails 4的东西吗?

更新 根据注释,而不是使用实例变量从控制器,我通过了新的局部变量进入部分是这样的:

= render 'form', object: @receipt 

而改变形成局部到:

= simple_form_for object do |f| 

仍获得与实例变量相同的结果。

+0

我不认为你可以直接从你的控制器传递实例变量到你的部分。你有没有试过把你需要的东西作为本地的东西传递? –

+0

@steveklein我会尝试一下,谢谢你的建议 –

+1

将'resource'替换为'resources'并且移除'get:index'。它可以解决您的问题 – Zakwan

回答

1

取代resourceresources和删除get :index。它可能会解决您的问题

-1

请将resource :receipts替换为resources :receipts 我希望这能解决您的问题。

还你不需要添加get "index"行动,因为resources关键字它自身提供CRUD操作,如(指数,新建,编辑等)

+0

你只是偷了我的答案大声笑 – Zakwan

+0

@Zakwan写一个答案,我会接受它 –

+0

@GandalfStormCrow完成。谢谢 – Zakwan