1

ユーザーがチャレンジを作成できるようにし (challenges_created)、他のユーザーがそれらを達成するためのサポートを提供できるようにしたい (challenges_supported)。ユーザー リソースの下にリソースがネストされた自己結合チャレンジ モデルを使用して、これを実行しようとしました。私は現在モデルを持っています:

class User < ActiveRecord::Base
  attr_accessible :name, :supporter_id, :challenger_id

  has_many :challenges_created, :class_name => 'Challenge', :foreign_key => :challenger_id
  has_many :challenges_supported, :class_name => 'Challenge', :foreign_key => :supporter_id
end

class Challenge < ActiveRecord::Base
  attr_accessible :challenger, :completion_date, :description, :duration, :status,      :supporter, :title

  belongs_to :challenger, :class_name => 'User'
  has_many :supporters, :class_name => 'User'
end

ユーザーが課題を作成するときと、それらをサポートするときの両方で、完全な CRUD と対応するビューが必要になると思います。このため、challenges_created_controller と challenge_supported_controller という名前の 2 つのコントローラーを作成しました。

私の routes.rb ファイルは次のとおりです。

resources :users do
  resources :challenges_created
  resources :challenges_supported
end

この設定で私が直面している問題は、新しいチャレンジを

http://localhost:3000/users/3/challenges_created/new 

メッセージを受け取ります

Showing /home/james/Code/Rails/test_models/app/views/challenges_created/_form.html.erb where line #1 raised:

undefined method `user_challenges_path' for #<#    <Class:0x007fb154de09d8>:0x007fb1500c0f90>
Extracted source (around line #1):

1: <%= form_for [@user, @challenge] do |f| %>
2:   <% if @challenge.errors.any? %>

編集アクションでも結果は同じです。私は多くのことを試しましたが、form_for で @challenge_created を参照すると、Challenge モデルと一致しません。

誰が私が間違っているのかについてアドバイスしてもらえますか。前もって感謝します。私のスキーマは次のとおりです。

  create_table "users", :force => true do |t|
    t.string   "name"
    t.datetime "created_at",    :null => false
    t.datetime "updated_at",    :null => false
    t.integer  "challenger_id"
    t.integer  "supporter_id"
  end

  create_table "challenges", :force => true do |t|
    t.string   "title"
    t.text     "description"
    t.integer  "duration"
    t.date     "completion_date"
    t.string   "status"
    t.datetime "created_at",      :null => false
    t.datetime "updated_at",      :null => false
    t.integer  "challenger_id"
    t.integer  "supporter_id"
  end
4

1 に答える 1

0

問題は、challenge_createdコントローラーはあるが、そのモデルがないことだと思います。あなたのフォームでは、ユーザーとチャレンジを指定するので、レールは ではなく、チャレンジ用のコントローラーを見つけようとしますchallenge_created。Rails は、モデルの場合、規則に基づいて名前が付けられたコントローラーがあると考えています。

チャレンジ用に 2 つの異なるコントローラーを作成しないことをお勧めします。1 つだけを使用し、アクションを区別します。list_createdたとえば、課題でlist_supportedアクションを作成できます。

于 2012-09-30T09:20:09.030 に答える