0

アカウントのサインアップフォームを持つレールアプリがあり、アカウントを作成すると同時に管理者ユーザーも作成します。

新しいメソッドのコントローラー コードは単純です。

  def new
    @account = Account.new
    @account.users.build
  end

create メソッドでは、2 つのモデルが検証され、次の方法で作成されます。

  def create
    @account = Account.new(params[:account])
    @account.status = "signup"
    if @account.save
      #find the user
      user = User.where("account_id =?", @account.id).first
      role = Role.where("rolesymbol =?", "admin").first
      @authorization = Authorization.new
      @authorization.role_id = role.id
      @authorization.user_id = user.id
      @authorization.save
    else
      render action: "new"
    end
  end

実際には、これはすべてうまく機能します。ただし、rspec コントローラー テストでユーザーをビルドする方法がわかりません。私はの行で物事を試しました

  describe "POST 'create'" do
    it "should create if all the details are correct" do
      account_params = FactoryGirl.attributes_for(:account)
      user_params = FactoryGirl.attributes_for(:user)
      post :create, :account => account_params, ;user => user_params
    end

ただし、これは、コードが示すように、ユーザーをアカウントの一部にするのではなく、2 つのモデルを順番に配置するだけです。

誰かが似たようなことをしましたか?

4

1 に答える 1

0

OK、私はこれを解決しました。したがって、2 つのモデルを 1 つのフォームに構築するモデルのコントローラー仕様では。

コントローラの仕様は

post :create, :account => attributes_for(:account).merge(users_attributes: [ attributes_for(:user) ])
  response.should redirect_to "http://test.host/subscribe/subcode/1/user-2"

エラーがどこにあったかについての以前の説明が不十分で申し訳ありませんが、これが同じ問題を抱えている他の人の助けになることを願っています

于 2013-09-14T13:37:29.000 に答える