0

スタック オーバーフローに関する同様の質問をいくつか見つけましたが、何の役にも立ちません。ユーザーモデルがあります。ユーザー モデルに属するプロファイル モデルがあります。プロファイル モデルに属するジョブ モデルがあります。ジョブを作成するための簡単なフォームを作成しています。ブラウザでフォームを送信すると、次のエラーが表示されます。

undefined method `build_job' for #<Student:0x007f8309023530>

そして、ジョブ コントローラーの create アクションを示します。

def create
    job = current_user.build_job(job_params)
    job.save
    redirect_to profile_path(current_user.profile_name)
end 

ジョブの作成方法はプロファイルの作成方法と同じですが、プロファイルという単語がジョブに置き換えられているため、なぜ機能しないのかわかりません。私の推測では、別のモデルに属するモデルに属するジョブと関係があると思います。これを修正するにはどうすればよいですか? また、ここに job_params メソッドがあります。

def profile_params
      params.require(:profile).permit(:title, :category, :description, :state, :zip_code, :rate, jobs_attributes: [:firm, :position])
end

そして、ここに私のモデルがあります:

仕事:

class Job < ActiveRecord::Base
  belongs_to :profile
end

プロフィール:

class Profile < ActiveRecord::Base
    belongs_to :user
    has_many :jobs, :dependent => :destroy
end

ユーザー:

class User < ActiveRecord::Base
    has_one :profile
end

ビューでの参照:

<%= @user.profile.job.firm if @user.profile.try(:job)%>

また、送信をクリックしてサーバーログを追加しています。質問への回答に役立つことを願っています:

  Started POST "/jobs" for 127.0.0.1 at 2013-10-27 21:45:06 -0400
    ActiveRecord::SchemaMigration Load (0.3ms)  SELECT "schema_migrations".* FROM "schema_migrations"
  Processing by JobsController#create as HTML
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"VRqIuzR1x6tE/G+/wzrG1iFBOEDE7mgsfyjokX7wNZo=", "job"=>{"firm"=>"signat", "position"=>""}, "commit"=>"Save"}
    User Load (0.7ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 ORDER BY "users"."id" ASC LIMIT 1
     (0.2ms)  BEGIN
    SQL (3.4ms)  INSERT INTO "jobs" ("created_at", "firm", "position", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id"  [["created_at", Mon, 28 Oct 2013 01:45:06 UTC +00:00], ["firm", "signat"], ["position", ""], ["updated_at", Mon, 28 Oct 2013 01:45:06 UTC +00:00]]
     (0.4ms)  COMMIT
  Redirected to http://localhost:3000/profiles/philip7899
  Completed 302 Found in 209ms (ActiveRecord: 9.8ms)


  Started GET "/profiles/philip7899" for 127.0.0.1 at 2013-10-27 21:45:06 -0400
  Processing by ProfilesController#show as HTML
    Parameters: {"id"=>"philip7899"}
    User Load (0.9ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 ORDER BY "users"."id" ASC LIMIT 1
    User Load (0.7ms)  SELECT "users".* FROM "users" WHERE "users"."profile_name" = 'philip7899' ORDER BY "users"."id" ASC LIMIT 1
    Profile Load (0.8ms)  SELECT "profiles".* FROM "profiles" WHERE "profiles"."user_id" = $1 ORDER BY "profiles"."id" ASC LIMIT 1  [["user_id", 1]]
    School Load (0.9ms)  SELECT "schools".* FROM "schools" WHERE "schools"."id" = $1 ORDER BY "schools"."id" ASC LIMIT 1  [["id", 1]]
    Job Exists (0.6ms)  SELECT 1 AS one FROM "jobs" WHERE "jobs"."profile_id" = $1 LIMIT 1  [["profile_id", 1]]
    Rendered profiles/_full_profile.html.erb (92.4ms)
    Rendered profiles/show.html.erb within layouts/application (95.4ms)
    Rendered layouts/_ssi_header_inner.html.erb (4.2ms)
    Rendered layouts/_ssi_footer.html.erb (0.2ms)
  Completed 200 OK in 218ms (Views: 209.4ms | ActiveRecord: 5.9ms)
4

1 に答える 1

1

いくつかの問題。has_manyユーザーでジョブを定義する必要がありますが、ビルドの正しい方法has_manyは次のとおりです。association.buildbuild_association

class User
  has_many :jobs, through: :profile
end

job = current_user.jobs.build(job_params)
于 2013-10-27T21:36:19.310 に答える