我正在做一个简单的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|
仍获得与实例变量相同的结果。
我不认为你可以直接从你的控制器传递实例变量到你的部分。你有没有试过把你需要的东西作为本地的东西传递? –
@steveklein我会尝试一下,谢谢你的建议 –
将'resource'替换为'resources'并且移除'get:index'。它可以解决您的问题 – Zakwan