Итак, я изучаю рельсы, написав несколько простых приложений, и в этом приложении у меня есть два типа объектов: Задачи и Projects.Sense заключается в том, что все эти объекты могут быть созданы пользователем, пользователем должно быть в состоянии управлять им и так on.Each задачей belongs_to проекта и проект has_many tasks.But, когда я создаю новый проект - это уже все задачи из всех других проектов, так как это выглядит: Создайте объект с правильным ID в Rails 4
Это «123 Задача была создана путем простого добавления задачи в «Проект», но та же задача все еще появляется в «Another project». Как я могу исправить эту ошибку и сделать мою задачу уникальной? Я думаю, что что-то должно быть добавлено к модели задач или проектов, Знаю, что я должен добавить.
Вот соответствующие контроллеры: tasks_controller.rb
class TasksController < ApplicationController
before_action :set_task, only: [:show, :edit, :update, :destroy]
# GET /tasks
# GET /tasks.json
def index
@tasks = Task.all
end
# GET /tasks/1
# GET /tasks/1.json
def show
end
# GET /tasks/new
def new
@task = Task.new
end
# GET /tasks/1/edit
def edit
end
# POST /tasks
# POST /tasks.json
def create
@task = Task.new(task_params)
respond_to do |format|
if @task.save
format.html { redirect_to home_url }
format.json { render :show, status: :created, location: @task }
else
format.html { render :home_url }
format.json { render json: @task.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /tasks/1
# PATCH/PUT /tasks/1.json
def update
respond_to do |format|
if @task.update(task_params)
format.html { redirect_to home_url }
format.json { render :home_url, status: :ok, location: @task }
else
format.html { render :home_url }
format.json { render json: @task.errors, status: :unprocessable_entity }
end
end
end
# DELETE /tasks/1
# DELETE /tasks/1.json
def destroy
@task.destroy
respond_to do |format|
format.html { redirect_to home_url }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_task
@task = Task.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def task_params
params.require(:task).permit(:deadline, :name, :project_id)
end
end
projects_controller.rb
class ProjectsController < ApplicationController
before_action :set_project, only: [:show, :edit, :update, :destroy]
# GET /projects
# GET /projects.json
def index
@projects = Project.all
end
# GET /projects/1
# GET /projects/1.json
def show
end
# GET /projects/new
def new
@project = Project.new
end
# GET /projects/1/edit
def edit
end
# POST /projects
# POST /projects.json
def create
@project = Project.new(project_params)
respond_to do |format|
if @project.save
format.html { redirect_to home_url }
format.json { render :show, status: :created, location: @project }
else
format.html { render :home_url }
format.json { render json: @project.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /projects/1
# PATCH/PUT /projects/1.json
def update
respond_to do |format|
if @project.update(project_params)
format.html { redirect_to home_url }
format.json { render :show, status: :ok, location: @project }
else
format.html { render :home_url }
format.json { render json: @project.errors, status: :unprocessable_entity }
end
end
end
# DELETE /projects/1
# DELETE /projects/1.json
def destroy
@project.destroy
respond_to do |format|
format.html { redirect_to home_url }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_project
@project = Project.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def project_params
params.require(:project).permit(:name)
end
end
И соответствующие взгляды: для задач
<% @tasks.each do |task| %>
<div class="row task">
<div class="col-xs-12">
<div class="col-xs-1 checkbox">
<%= check_box_tag 'accept' %>
</div>
<div class="col-xs-8 taskbody">
<%= task.name %>
</div>
<div class="mini-glyph">
<div class="col-xs-1">
<span class="glyphicon glyphicon-arrow-up"></span>
<span class="glyphicon glyphicon-arrow-down"></span>
</div>
<div class="col-xs-1">
<%= link_to edit_task_path(task) do %>
<span class="glyphicon glyphicon-pencil"></span>
<% end %>
</div>
<div class="col-xs-1">
<span><%= link_to " ", task, method: :delete, data: { confirm: 'Are you sure?' }, class:"glyphicon glyphicon-trash" %></span>
</div>
</div>
</div>
</div>
<% end %>
И для проектов:
<div class="container">
<% @projects.each do |project| %>
<div class="projectblock">
<div class="row project-bar">
<div class="col-xs-12 ">
<div class="col-xs-1">
<span class="glyphicon glyphicon-list-alt"></span>
</div>
<div class="col-xs-9 prname">
<%= project.name %></td>
</div>
<div class="col-xs-1">
<%= link_to edit_project_path(project) do %>
<span class="glyphicon glyphicon-pencil"></span>
<% end %>
</div>
<div class="col-xs-1">
<span><%= link_to " ", project, method: :delete, data: { confirm: 'Are you sure?' }, class:"glyphicon glyphicon-trash" %></span>
</div>
</div>
</div>
<div class="row add-task-bar">
<div class="input-bar col-xs-12 ">
<div class="glyphicon glyphicon-plus col-xs-1 left_plus" ></div>
<div class="col-xs-10" >
<div class="input-group">
<input type="text" class="form-control" placeholder="Start typing here to create a task...">
<span class="input-group-btn">
<button class="btn btn-default" type="button"><%= link_to 'Add task', new_task_path %></button>
</span>
</div>
</div>
</div>
</div>
<div class="col-xs-8 taskbody">
<% project.tasks.each do |task| %>
<%= @task.name %>
<% end %>
</div>
</div>
<% end %>
</div>
<div class="row text-center">
<div class="col-xs-4"></div>
<div class="todo-btn col-xs-4">
<a href="projects/new" class="btn">
<span class="glyphicon glyphicon-plus"></span>
Add TODO list
</a>
</div>
</div>
Я знаю, что прошу об этом во второй раз, но последний вопрос не был полностью удовлетворен из-за моей ошибки - я просто не могу понять, где именно я должен вставить эту «Task.where (project_id : project_id) " Поэтому я вынужден просить совет снова
Project.rb
class Project < ActiveRecord::Base
belongs_to :user
has_many :tasks, dependent: :destroy
validates :name, presence: true, uniqueness: true
end
Task.rb
class Task < ActiveRecord::Base
belongs_to :project
end
Подробнее о классе Проект
Tim
Я добавил свои модели, но (извините, если я буду раздражать), вы имели в виду, что я могу оставить все эти «где» и оставить контроллер как есть, просто изменив соответствующее представление? – Mikhah
И еще жаль снова за этот нарушенный комментарий – Mikhah