【问题标题】:Ruby on Rails: Form ErrorRuby on Rails:表单错误
【发布时间】:2012-07-18 16:13:49
【问题描述】:

我有一个表单,它获取用户信息并将其存储在数据库中。对于某些字段,用户可以将新信息放入字段中,或从数据库中选择以前的信息。它之前可以工作,但是我最近清理了数据库,现在当我尝试访问该页面时出现此错误。

未定义的方法`empty?'对于 nil:NilClass

提取的源代码(第 27 行附近):

27: "选择以前的客户端") %>

表单视图示例:

<div class="field">
<%= label_tag :new_client, "Client" %><br/>
<%= text_field_tag :new_client %>
Or
<%= f.select( :client, Project.all.map {|p| [p.client]}.uniq!, :prompt => "Select a previous Client") %>
</div>

项目负责人:

def create
@project = Project.new(params[:project])


@project.client = params[:new_client] unless params[:new_client].empty?
@project.exception_pm = params[:new_exception_pm] unless params[:new_exception_pm].empty?
@project.project_owner = params[:new_project_owner] unless params[:new_project_owner].empty?
@project.role = params[:new_role] unless params[:new_role].empty?
@project.industry = params[:new_industry] unless params[:new_industry].empty?
@project.business_div = params[:new_business_div] unless params[:new_business_div].empty?

respond_to do |format|
  if @project.save
    format.html { redirect_to @project, notice: 'Project was successfully created.' }
    format.json { render json: @project, status: :created, location: @project }
  else
    format.html { render action: "new" }
    format.json { render json: @project.errors, status: :unprocessable_entity }
  end
end
end

更新:

我认为错误来自 .uniq!我的表单视图中的方法。还有其他想法吗?

谢谢

【问题讨论】:

  • 你试过输出params变量来看看哪个是nil吗?将其放在第一个 params[...].empty? 调用上方的一行:logger.debug "--- params[:new_client]: #{params[:new_client]}, params[:new_exception_pm]: #{params[:new_exception_pm]}, params[:new_project_owner]: #{params[:new_project_owner]}, params[:new_role]: #{params[:new_role]}, params[:new_industry]: #{params[:new_industry]}, params[:new_business_div]: #{params[:new_business_div]}"。此外,您应该考虑使用.blank?。见http://stackoverflow.com/a/888877/664833

标签: ruby-on-rails ruby forms drop-down-menu


【解决方案1】:

您应该使用blank? 方法而不是empty?

【讨论】:

  • 我尝试了您的建议,但错误仍然显示相同,即使我将所有 empty? 更改为 blank?
  • 我现在看到它与.uniq! 有关。我将其更改为uniq,这似乎有效,我将您的建议留在了里面。谢谢
【解决方案2】:

您没有任何项目可映射到您的下拉列表中。

添加一个项目,你应该没问题。

【讨论】:

  • 我是这么想的,所以我尝试添加两个。似乎没有什么不同。反正干杯
  • 代替你的unless empty?测试试试unless(params.has_key?(:new_client)
  • 我可能应该提到我是 Ruby on Rails 的新手
【解决方案3】:

我从使用uniq! 更改为uniq

这似乎解决了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 2017-06-15
    • 2014-04-17
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多