【问题标题】:form not creating new entries表单不创建新条目
【发布时间】:2013-09-14 16:19:56
【问题描述】:

我正在尝试创建一个表单来添加传输器: 我有调用模板的 app/views/transporters/new.html.erb,app/views/_form.html.erb 看起来像:

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

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

  <div class="field">
    <%= f.label :name %><br>
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :phone %><br>
    <%= f.text_field :phone %>
  </div>
  <div class="field">
    <%= f.label :id_number %><br>
    <%= f.text_field :id_number %>
  </div>
  <div class="actions">
    <%= f.submit 'Add transporter', class: 'btn btn-success' %>
  </div>
<% end %>
<%= link_to 'Back to all transporters', transporters_path, class: "btn" %>
</div>
</div>

这是我的运输控制器中的创建操作:

  def create
    @transporter = Transporter.new(transporter_params)
  end

private 
def transporter_params
      params.require(:transporter).permit(:name, :phone, :id_number)
    end

当我单击添加传输器时,表单不会去任何地方。我有什么问题?

更新: 这是我的路线文件:

Cowsnhills::Application.routes.draw do
  resources :transporters

  resources :deliveries

  root 'welcome#index'
end

当我点击提交时,表单会重新加载,但条目不会显示在我的运输商索引中,代码如下: 运输者控制器方法:

  def index
    @transporters = Transporter.all
  end

和运输商指数:

<h1>Listing transporters</h1>

<table>
  <thead>
    <tr>
      <th>Name</th>
      <th>Phone</th>
      <th>Id</th>
      <th></th>
      <th></th>
      <th></th>
      <th></th>
    </tr>
  </thead>

  <tbody>
    <% @transporters.each do |transporter| %>
      <tr>
        <td><%= transporter.name %></td>
        <td><%= transporter.phone %></td>
        <td><%= transporter.id %></td>
        <td><%= f.link_to_add "Add a delivery", :deliveries %></td>
        <td><%= link_to 'Show transporter details', transporter %></td>
        <td><%= link_to 'Edit transporter details', edit_transporter_path(transporter) %></td>
        <td><%= link_to 'Delete transporter', transporter, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
  </tbody>
</table>

<br>

<%= link_to 'New Transporter', new_transporter_path, class: "btn" %>

还有一个运输商 has_many Deliveries 和一个 velivery belongs_to 运输商协会正在进行中

【问题讨论】:

  • “它哪儿也不去”是什么意思?你有一个 404,并且渲染了同一个页面?
  • 你能发布你的运输资源路线吗?
  • 我刚刚在本地安装了您的应用程序,并创建了一个新的传输器,没有任何问题。你检查过你的日志看看发生了什么吗?

标签: ruby-on-rails ruby-on-rails-4


【解决方案1】:

您只需在创建操作中使用表单中的参数创建一个新对象,但您没有保存它。 将@transporter.save 添加到您的创建操作中。

【讨论】:

    【解决方案2】:

    使用

     @transporter = Transporter.new(params[:transporter])
    

    @transporter = Transporter.new(params["transporter"])
    

    检查我的最后一条评论以保存它。

    【讨论】:

    • OP 使用强参数。
    • @billy 是的,我已经看到了,但是使用 params[:transporter] 检查将字段设置为 attribute_accessible 以测试是否有任何错误并没有什么坏处。看起来形式还可以。
    • 请检查您是否启用了 html5 浏览器,如果您没有正确的字段类型数据,该浏览器将自动无法提交您的表单
    • @SabyasachiGhosh Rails 4 中没有更多的attr_accessible。OP 使用 Rails 4。
    • 在创建动作中写入 transporter = Transporter.new(transporter_params) 然后 transporter.save 并检查
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多