0

アスリートがコーチのトレーニング計画に対応できるようにするシステムを作成しようとしています。これを行うために、コーチがコンテンツを作成できるようにしましたが、ブログベースのシステムを使用して作成しています...現在、ページは次のように表示されます

コンテンツタイトル

コンテンツ情報 1...

コンテンツ情報 2...

コンテンツ情報 3...

コメント...

コメント 1

コメント 2

コメント 3

。等

ただし、投稿ごとに最大7コメントしかないように設定し、投稿ごとにこのように設定したい...

コンテンツタイトル

コンテンツ情報 1...

コメント 1

コンテンツ情報 2...

コメント 2

コンテンツ情報 3...

コメント 3

。等

これはおそらく私が望む最善の方法ではないことを理解していますが、うまくいきます(私が望む場所に表示されないだけです)より多くのモデルを作成して実験を行いましたが、投稿ごとに 1 つのコメント システム。これを整理するための助けが得られるかどうか、またはこれを簡単にするためにできる方法があるかどうか、モデルが機能するかどうか、または何か間違ったことをしているだけかどうかを考えていましたか?? これで十分な情報が得られない場合は教えてください。もっと提供してみてください。ありがとうございました

.

.

編集:

私が使用したモデルは次のとおりです。 プログラム - その週に設定されたトレーニング計画のように コーチ - ライダーにデータを入力しているコーチ ライダー - コーチのデータに独自のデータでコメントする。

どのファイルが正確に必要なのかわからないので、プッシュしている github ページ ( https://github.com/effectonedesign/coacheasy1 ) へのリンクを含めました。他に必要な情報がある場合は、お知らせください。

私は「心」が言ったことは好きですが、私は言ったことをすべてやりました.defショー(プログラムコントローラー)では、エラーがあると言っています.nil:NilClassの未定義メソッド「コーチ」というメッセージが表示され続けますすべてが同一です彼には問題がありますが、私は本当に助けに感謝しています! ありがとう

4

1 に答える 1

0

上記のTrainingPlan, Section(またはコンテンツ、text_block など) とComment.

次に、次の操作を行います

  • TrainingPlan has_many :sections
  • セクションの所属先:training_plan
  • セクション has_one :comment (セクションごとに 1 つのコメントのみを許可する場合、それ以外の場合は has_many を使用)
  • コメントの属する_に:セクション

ここで、必要なフォーマットを実現するために、ビューで次の操作を行います。

<% @training_plan.sections.each do |section| %>
  <%= section.text %>
  <%= section.comment.text %>
<% end %>

複数のコメントを許可する場合:

<% @training_plan.sections.each do |section| %>
  <%= section.text %>
  <% section.comments.each do |comment| %>
    <%= comment.text %>
  <% end %>
<% end %>

コメントフォーム

私は以下をテストしていないので、いくつかの部分を微調整する必要があるかもしれません.
トレーニング プラン コントローラー:

def show
  # using includes will query the database 3 times only (once for each table) rather than
  # querying it 1 + N + N (in this case 7 sections, 7 comments possibly, so 15 times)
  @training_plan = TrainingPlan.includes(:sections, sections: :comment).find(params[:id])
  @sections = @training_plan.sections
  @sections.each do |section|
    # only build a new comment if there is no comment for that section already
    section.build_comment unless section.comment
  end
end

ビュー内で views/training_plans/show.html.erb

<%= @training_plan.title %> # or whatever
<% @sections.each do |section|
  <%= @section.content %>
  <% if section.comment %>
    <%= section.comment.content %>
  <% else %>
    <%= render 'comments/form', comment: section.comment %> # or wherever you have the form
  <% end %>
<% end %>

ビュー/コメント/_form.html.erb

# This might break if you have a separate comment action somewhere which passes an
# instance variable @comment to the form
<%= form_for comment do |f| %>
  # normal form stuff
<% end %>

それがすべて機能する場合、トレーニング プランの表示ページに各セクションが表示されます。コメントがある場合はそのコメントがレンダリングされ、そうでない場合はフォームが表示されます。

ルートによっては、実行rake routesしてコメント作成アクションの場所を確認し、それをフォームに渡す必要がある場合があります<%= form for comment, url: some_url_helper_here do |comment| %>

私だったら、この railscastのように、JavaScript を使用してコメントの追加部分を作成しますが、RoRは初めてなので、シンプルにしようとしました。

于 2013-04-16T00:56:50.840 に答える