モデルメソッドを書くことの背後にある基本を理解するのに苦労しています。これは、これを機能させるために必要なことだと思います。基本的に、そのプロジェクトに属する project_todos を表示するプロジェクト ビューがあります。次に、project_todo に属する project_todo_comments を入れ子にします。すべてを 1 つのビューに。
has_many
project_todos、project_todobelongs_to
プロジェクト、project_todo_commentsがプロジェクトになるように関連付けを設定しましたhas_many
。それからもちろん project_todo_comment belongs_to
project_todo.
プロジェクトコントローラーで、私はこれをやっています:
def show
@project = Project.find(params[:id])
# Display the form to create a new todo
@project_todo = ProjectTodo.new
# Create the instance variable to display the loop in the view
@todos = @project.project_todos
# Display the form to create a new comment
@project_todo_comment = ProjectTodoComment.new
# Create the instance variable to display the loop in the view
@comments = @project.project_todo_comments
respond_to do |format|
format.html # show.html.erb
format.json { render :json => @project }
end
end
これで、プロジェクトに Todo を追加して表示できるようになりました。また、プロジェクトの Todo にコメントを追加して表示することも、すべて同じビューで行うことができます。しかし、コメントが関連付けられている todo のみを表示するのに苦労しています。現在、任意の todo にコメントを追加すると、すべての todo にそのコメントが表示されます。
ビューでは、ここに project_todos を表示し、フォームをネストしてコメントを追加し、コメントを表示しています。
<% @todos.each do |todo| %>
<p><%= todo.title %></p>
<%= form_for(@project_todo_comment) do |f| %>
<%= f.hidden_field :project_todo_id, :value => @project_todo.id %>
<%= f.hidden_field :project_id, :value => @project.id %>
<%= f.text_area :comment %>
<%= f.submit 'Add Comment' %>
<% end %>
<% @comments.each do |comment| %>
<%= comment.comment %>
<% end %>
<% end %>
これを機能させるにはモデルメソッドを書く必要があると言われましたが、まだそれらを理解しようとしています. 実際にモデルメソッドを書く必要があることを誰かが安心させ、それらについて学ぶ方向性を教えてもらえますか? ありがとう!