class Project
has_many :project_questions, dependent: :destroy#, through: :projects
accepts_nested_attributes_for :project_questions
end
I am trying to make an app with rails 4 and Simple Form.
I have models called projects, project_questions and project_answers.
The associations between them are:
Projects:
has_many :project_questions, dependent: :destroy#, through: :projects
accepts_nested_attributes_for :project_questions
Project questions:
belongs_to :project#, counter_cache: true
has_many :project_answers, dependent: :destroy
belongs_to :user
accepts_nested_attributes_for :project_answers
belongs_to :user
Project answers:
belongs_to :project_question#, counter_cache: true
belongs_to :user
User:
has_many :project_questions
has_many :project_answers
class ProjectQuestions
belongs_to :project#, counter_cache: true
has_many :project_answers, dependent: :destroy
belongs_to :user
accepts_nested_attributes_for :project_answers
end
ProjectAnswer:
belongs_to :project_question#, counter_cache: true
belongs_to :user
My objective is to have a partial on my projects show page which displays the questions and their answers relating to the project and to have a link to another form where you can ask a question or answer one. I am struggling.
In my controllers I have:
Projects:
def project_params
params.require(:project).permit(project_question_attributes: [:title, :content, :user_id, :project_id,project_answer_attributes: [:answer, :project_question_id]],
Project_question:
def new
@project_question = ProjectQuestion.new
@project_id = params[:project_id]
@project_question.project_answers[0] = ProjectAnswer.new
end
Project_answer:
def new
@project_answer = ProjectAnswer.new
end
def project_question_params
params[:project_question].permit(:id, :title, :content, :project_id, :user_id,project_answer_atttibutes: [:id, :answer, :project_question_id, :user_id])
end
Then in my views I have:
Project#show:
<% if current_user.id == @project.creator_id %>
<%= link_to 'Ask a question', new_project_project_question_path(:project_id => @project.id) %>
<% end %>
<%= render 'project_questions/pqps' %>
Project_question#pqps (a partial):
<div class="containerfluid">
<div class="row">
<div class="col-md-10 col-md-offset-1">
<div class="categorytitle">
<%= @project_question.try(:title) %>
</div>
<div class="generaltext">
<%= @project_question.try(:content) %>
</div>
<span class="editproject">
<% if current_user.id == @project.creator_id %>
<% end %>
</span>
</div>
</div>
</div>
My project_questions form partial is:
<div class="containerfluid">
<div class="row">
<div class="col-md-10 col-md-offset-1">
<% f.simple_fields_for :project_questions do |f| %>
<%= f.input :project_id, as: :hidden, input_html: {value: @project_question_id} %>
<%= f.input :title, label: 'Question:', :label_html => {:class => 'categorytitle'}, placeholder: 'Type your question here', :input_html => {:style => 'width: 100%', class: 'categorytitle'} %>
<%= f.input :content, label: 'Is there any context or other information?', :label_html => {:class => 'categorytitle'}, placeholder: 'Context might help to answer your question', :input_html => {:style => 'width: 100%', rows: 5, class: 'generalprojecttext'} %>
<%= f.button :submit %>
<% end %>
</div>
</div>
</div>
Project_answer#pa (a partial):
(not yet written - still trying to get the questions to work)
My routes are:
resources :projects do
resources :project_questions do
resources :project_answers
end
end
When I try this, I get an error in my project_questions form that says:undefined local variable or method
f' for #<#:0x000001013d8298>`
I can't see where it is talking about f outside the form block. I have tried adding another line to the form for simple_fields for project and then nesting the project questions form inside of it, but that doesn't change anything.
Can anyone see what I've done wrong?
Thank you
You should change this line <% f.simple_fields_for :project_questions do |f|
%>
to this <%= simple_form_for :project_questions do |f| %>
in order to make it work.