【问题标题】:Ruby on Rails: undefined method, error with Controller methodsRuby on Rails:未定义的方法,控制器方法错误
【发布时间】:2012-07-18 15:09:27
【问题描述】:

我正在制作一个网站,用户可以在其中将数据输入数据库,然后可以在另一个页面上搜索数据库。目前创建新条目表单工作正常,用于显示表格的搜索页面也工作正常,因为我还没有实现搜索。

控制器:

def search
 @project_search = Project.order(sort_column + " " + sort_direction)
end

  private

   def sort_column
    Project.column_names.include?(params[:sort]) ? params[:sort] : "project_name"
   end

   def sort_direction
    %w[asc desc].include?(params[:direction]) ? params[:direction] : "asc"
   end


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


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

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

当我注释掉搜索方法时,我的输入表单会起作用,但是当它们都存在时,我会收到此错误。

NilClass:Class 的未定义方法 `model_name'

从第 1 行的表单视图中提取的源代码:

<%= form_for(@project) do |f| %>

我认为这只是一个小问题,但我不知道如何解决它。我是 ruby​​ on rails 的新手,所以放轻松:)。

谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby methods controller


    【解决方案1】:

    不是 100% 确定,但我认为这是因为 private 所在的位置。在 Ruby 中,调用之后的所有内容都是私有的。 Rails 可能会忽略您对 create 的定义并使用它自己的。当您说“注释掉搜索方法”时,您是否有可能注释掉 private

    【讨论】:

    • 这就是问题所在。我删除了private。我真的需要它吗?非常感谢您的帮助
    • 你很可能需要它,它必须放在最后,因为它之后的所有内容都被视为私有。
    • @JamesMcL13 我会将任何类型的控制器辅助方法放在私有(即 sort_column)之下。随着您在 Rails 和 Ruby 方面获得更多经验,您将弄清楚什么应该是私有的,方法应该去哪里等等。我认为您肯定走在正确的轨道上,并且您会通过经验弄清楚这些事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-19
    相关资源
    最近更新 更多