【问题标题】:Rails form on index page not passing params索引页面上的 Rails 表单未传递参数
【发布时间】:2013-05-16 23:40:38
【问题描述】:

我目前只有两个控制器方法:index 和 create

我在索引页上有一个表格。我希望它解决我在控制器中的创建方法。当一个新对象被创建并保存在数据库中时,它似乎实际上是在那里解决的,但是我拥有的单个参数没有被传递。它在数据库中显示为 nil。

我有很多关于 Rails 和使用的约定的知识。我认为这不是路由问题,因为正在创建对象。只是没有参数被推送。

这是我的控制器:

class MitchismsController < ApplicationController

def index
    @mitchisms = Mitchism.all
    @mitchism = Mitchism.new
end

def create
    @mitchism = Mitchism.new(params[:mitchsim])
    @mitchism.save
    redirect_to mitchisms_path
end

end

这是我的观点:

<h1>Mitchisms</h1>

<%= form_for(@mitchism) do |f| %>
<ul>
    <% @mitchism.errors.full_messages.each do |error| %>
        <li><%= error %></li>
    <% end %>
</ul>

<p>
    <%= f.label :body, "Add your Mitchism:" %><br />
    <%= f.text_field :body %>
</p>

<p>
    <%= f.submit %>
</p>
<% end %>


<% @mitchisms.each do |mitchism| %>
    <div id="mitchisms">
        <%= mitchism.body %>
    </div>
<% end %>

【问题讨论】:

  • 你有一个错字params[:mitchism]
  • juanpastas 是正确的,这就是创建 nil 属性的原因,因为您传递的参数不存在(其计算结果为 nil)。此外,您可能应该向您的模型 guides.rubyonrails.org/active_record_validations_callbacks.html 添加一些验证,并按照 Kiddorails 的建议更新代码。
  • 感谢各位的帮助。我觉得这是一个错字,我像个白痴。我也会按照 Kiddorails 的建议重写我的控制器。

标签: ruby-on-rails


【解决方案1】:

不太明白你的意思“但是我的单个参数没有传递”。如果正在创建您的对象(如您所说),那么您的数据库如何为零? Mitchism.all 必须归还所有保存的对象。

而且,你的控制器必须是这样的:

class MitchismsController < ApplicationController

  def index
    @mitchisms = Mitchism.all
    @mitchism = Mitchism.new #creates a new object
  end

  #after form is submitted, it will reach to create action below
  def create
    @mitchism = Mitchism.new(params[:mitchism])
    if @mitchism.save
      redirect_to mitchisms_path
    else
      render 'index'
    end
  end

end

【讨论】:

  • 感谢您的帮助。我很感激。
【解决方案2】:

在您的索引中,由于这是最后一条语句,因此您将始终获得该值。

@mitchism = Mitchism.new.

您可能希望找到它而不是在索引中创建它

@mitchism = Mitchism.find(params[:mitchsim])

【讨论】:

  • 据我记忆和认为,您不应该在 create 方法中调用 find
猜你喜欢
  • 1970-01-01
  • 2017-01-06
  • 2018-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多