【问题标题】:Submit a form to a model from my homepage从我的主页向模型提交表单
【发布时间】:2013-05-01 11:49:35
【问题描述】:

我有一个链接模型,其中包含为其创建的所有通用脚手架,但是,我想从我的主页提交一个填充新记录的表单,而不是转到 link#new 页面。

我只有一个文本字段,但我不确定如何构建表单。我在某处读到您必须在表单字段中指定控制器,但这似乎不起作用。

<%= form_for(:link, @link) do |f| %>
  <% if @link.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@link.errors.count, "error") %> prohibited this link from being saved:</h2>

      <ul>
      <% @link.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :url %><br />
    <%= f.text_field :url %>
  </div>

  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

【问题讨论】:

    标签: ruby-on-rails ruby routes form-for


    【解决方案1】:

    如果您使用默认路由,则无需指定任何内容。

    如果@link 是数据库中不存在的对象,Rails 会自动认为这是#new 的表单。所以表单动作是/links,方法是post,这是#create的默认资源

    在你的情况下,你不需要做任何事情,只需将表单代码修改为:

    <%= form_for(@link) do |f| %>
    ....
    

    此外,您需要在家庭控制器中准备@link 对象,例如

    @link = Link.new

    【讨论】:

    • 谢谢比利。这行得通!我想知道 - 这会在主页运行时创建一个对象吗?还是只有在我提交表格后才提交?我想知道是否有一种方法可以仅在提交表单时创建对象......如果它还没有这样做。
    • @Adam,#new(或 HomeController#home)中的这个对象用于构建表单,它的几乎所有属性都是 nil。如果您填写表单并提交,“post”操作会将您填写的值发送到接收器,即“create”操作。 "#create" 将从 param 获取这些值来构建另一个与第一个对象完全没有关系的新对象。此对象已准备好保存。正常流程是,如果保存成功,则返回成功消息,否则返回错误消息。
    【解决方案2】:

    您所要做的就是将url 参数添加到form_for 助手

    <%= form_for :link, url: your_home_path do |f| %>
    

    【讨论】:

    • 谢谢索普,当你说你的主路径时,你指的是根目录,还是链接资源的路径?我尝试了似乎没有调用它的 link_path 和 home_path (我有一个用于主页的控制器),或者是它被调用的页面?我是否需要像上面比利所说的那样使用 link.new 启动模式?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多