将has_many关联的方法转换为has_one关联

时间:2013-12-15 10:22:37

标签: ruby-on-rails

我有2个模型,用户和common_apps。

用户has_one:common_app。

在此之前,我以用户has_many common_apps编写代码,但是我不知道如何为has_one关联重写该代码。主要的困惑是如何在common_app控制器中构造“new”。

当我尝试时,我得到一个未定义的方法错误。

undefined method `new' for #<CommonApp:>

这是我的代码 - &gt;

def new
    if current_user.common_app.any?
      redirect_to current_user
    else
        @common_app = current_user.common_app.new 
    end
  end

  def create 
    @common_app = current_user.common_app.build(common_app_params)
    if @common_app.save
        flash[:success] = "Common App Created!"
        redirect_to root_url
    else
        redirect_to 'common_apps/new'
    end
  end

  def show
    @common_apps = current_user.common_app
  end

如果这是一个has_one关联,你会如何重组这个?

我想我知道'创造'应该如何 - &gt;

      def create 
        @common_app = current_user.build_common_app(common_app_params)
        if @common_app.save
            flash[:success] = "Common App Created!"
            redirect_to root_url
        else
            redirect_to 'common_apps/new'
        end
      end

1 个答案:

答案 0 :(得分:0)

您的新动作应如下所示:

def new
  if current_user.common_app.present?
    redirect_to current_user
  else
    @common_app = current_user.build_common_app
  end
end

您也可以在没有传递任何参数的情况下致电build_common_app,这会为current_user初始化一个空的CommonApp。