I want to create a submission model where a user can create submissions for tasks. Each submission should have a user_id and a task_id. When I try to create a submission, rails returns an error saying that the task must exist.
task model:
has_many :submissions
user model:
has_many :submissions
submission model:
belongs_to :user
belongs_to :task
routes:
resources :tasks do
resources :submissions
end
submissions controller:
def create
@task = Task.find(params[:task_id])
@submission = current_user.submissions.build(submission_params)
if @submission.save
flash[:success] = "Submitted!"
redirect_to task_submission_path(@task, @submission)
else
puts @submission.errors.full_messages
render 'new'
end
end
def new
@task = Task.find(params[:task_id])
@submission = Submission.new
end
def show
@submission = Submission.find(params[:id])
end
private
def submission_params
params.require(:submission).permit(:description)
end
tasks/show.html.erb:
<% if user_signed_in? %>
<%= link_to "Submit", new_task_submission_path(@task) %>
<% end %>
submissions/new.html.erb:
<h2>Submit</h2>
<%= form_for [:task, @submission] do |f| %>
<div><%= hidden_field_tag :task_id, @task.id %></div>
<div class="field">
<%= f.text_area :description, placeholder: "File description" %>
</div>
<%= f.submit "Submit", class: "btn btn-primary" %>
<% end %>
submission migration:
def change
create_table :submissions do |t|
t.string :description
t.integer :user_id
t.integer :task_id
t.timestamps
end
end