Ruby on rails 在Rails中,如何使用相同的表单来创建和更新对象?
我使用的是Rails 5。为了避免重复太多的代码,我希望在创建和更新对象时使用相同的表单。我想将表单提交给我的控制器的创建方法以创建Ruby on rails 在Rails中,如何使用相同的表单来创建和更新对象?,ruby-on-rails,forms,controller,routes,ruby-on-rails-5,Ruby On Rails,Forms,Controller,Routes,Ruby On Rails 5,我使用的是Rails 5。为了避免重复太多的代码,我希望在创建和更新对象时使用相同的表单。我想将表单提交给我的控制器的创建方法以创建 def create @user_notification = UserNotification.new(user_notification_params) ... end <%= form_for @user_notification, :url => user_notifications_path do |f| %>
def create
@user_notification = UserNotification.new(user_notification_params)
...
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>
...
及其更新方法,用于更新
def update
...
end
我有这个表单,它可以很好地创建
def create
@user_notification = UserNotification.new(user_notification_params)
...
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>
...
我已经在config/routes.rb文件中定义了这一点
resources 'user_notifications'
但我觉得问题不仅仅是路线问题。如何调整表单定义。有没有办法在创建和更新时使用相同的分部,如果有,我需要对上述内容进行哪些调整?您可以使用“渲染”来提供帮助 下面是示例代码 首先将表单重命名为_user_notification.html.erb(注意:请确保在文件名前面添加了u 在new.html.erb和edit.html.erb中,使用render调用它
<%= render 'user_notification' %>
我认为您可能遇到的问题是,您正在表单中显式设置URL:
form_for @user_notification, :url => user_notifications_path
user\u notifications\u path
将根据请求方法与两个路由匹配。使用带有GET的user\u notifications\u path
将与索引操作匹配,使用POST将与创建操作匹配
对于您需要用户通知\u路径的情况,请注意它是单数的。此帮助程序将与GET请求上的显示操作、PUT/PATCH请求上的更新操作以及删除请求上的销毁操作相匹配
使用form_for时,您应该能够在不显式设置URL的情况下获得所需的效果:
form_for @user_notification
Rails将根据@user\u notification
中的模型是否为新记录自动设置正确的URL和请求方法,并自动尝试为您找到正确的路由。解决这一问题的最简单方法是生成一个scaffold。scaffold将为您提供默认视图,包括一个指向u的部分表单在创建和编辑操作中使用se。