我正在使用Rails 5.为了不复制太多代码,我想使用相同的表单来创建和更新我的对象。我希望表单提交给我的控制器的创建方法来创建...
def create
@user_notification = UserNotification.new(user_notification_params)
...
end
及其更新方法......
def update
...
end
我有这个表单,适用于创建...
<%= form_for @user_notification, :url => user_notifications_path do |f| %>
<%= f.hidden_field :id %>
...
<div class="field">
<%= f.label :price, 'Price' %> <span class="required">*</span> <br>
<%= f.text_field :price, :size => 30 %>
</div>
...
但是在更新时,我在提交更新请求后会收到此错误...
No route matches [PATCH] "/user_notifications"
我在config / routes.rb文件中定义了这个
resources 'user_notifications'
但我觉得这个问题比路线问题更深刻。如何调整表单定义。有没有办法在创建和更新时使用相同的部分,如果是,我需要对上面的内容进行哪些调整?
答案 0 :(得分:2)
我认为您可能遇到的问题是您在表单中明确设置了网址:
form_for @user_notification, :url => user_notifications_path
user_notifications_path
将匹配两条路线,具体取决于请求方法。使用带有GET的user_notifications_path
将与索引操作匹配,并且POST将与create操作匹配。
对于您的情况,您需要user_notification_path
,请注意它是单数。此帮助程序将匹配GET请求上的show操作,对PUT / PATCH请求的更新操作以及对DELETE请求的销毁操作。
使用form_for时,您应该能够在不明确设置URL的情况下获得所需的效果:
form_for @user_notification
Rails会根据@user_notification
中的模型是否为新记录自动设置正确的URL和请求方法,并自动尝试为您找到正确的路径。
答案 1 :(得分:0)
您可以使用渲染来帮助rails render guilde 这是示例代码
首先将表单重命名为_user_notification.html.erb(注意:请确保在文件名前添加_
并在你的new.html.erb和edit.html.erb中,使用render来调用它
imageView.setDrawingCacheEnabled(true);
Bitmap bitmap = imageView.getDrawingCache();