我在 05:15 的 Go Rails 视频中看到了显示的代码: 视频教程
<%= form_with model: Link.new do |form| %>
# ...
<% end %>
通常我会写一个新动作。比如:
def new
@link = Link.new
end
显然,在调用 form_with 时,可以跳过该操作并动态创建所需的对象。
新行动有什么好处?
是否有一个单独的路由,在调用时创建表单?
拥有控制器操作的主要优点是它将逻辑放在一个清晰连贯的地方。
视图本质上是混乱的,因为它是标记和代码的组合,它实际上应该只关心以最直接的方式将数据转换为 HTML。实例化或查询该数据应该是控制器的责任。
除了概念问题之外,还有直接的实际原因导致
<%= form_with model: Link.new do |form| %>
是一种不好的做法。
虽然你可以在视图中处理这个问题:
<%= form_with model: @link || Link.new do |form| %>
# ...
<% end %>
这又将逻辑置于不属于它的视图中。