Ответ на ваш вопрос сводится к тому, что вы беспокоитесь.Вы хотите предотвратить ошибки пользователя или предотвратить злонамеренное использование?
Для первого, наличие project_id
в скрытом поле формы представляет очень небольшую опасность.Ваши пользователи вряд ли увидят это, и даже более вряд ли будут заботиться.
Если вы пытаетесь предотвратить злонамеренное использование, это становится более проблематичным - но опять же, это зависит от того, что вы пытаетесь предотвратить.
Если вы пытаетесь запретить пользователям добавлять задачи в проекты, к которым у них тоже нет доступа, используйте какую-то систему разрешений, чтобы запретить пользователю доступ к определенным проектам.Самый простой способ для этого - просто установить отношения между пользователями и проектами, а затем использовать current_user.projects.find(params[:project_id]).tasks.create
(или аналогичный) в вашем контроллере.
Теперь, если вы абсолютно, положительно, не хотите, чтобы пользователидобавить задачи в любой другой проект - точка - вы можете рассмотреть возможность предварительного создания задачи.По сути, вы должны создать задачу в своем действии new
и перенаправить пользователя на действие редактирования.Примерно так:
def new
@project = Project.find(1) # Or however you want to fetch the project
@task = @project.tasks.create
redirect_to edit_project_task(@project, @task) # May vary depending on your routes
end
При таком подходе вы захотите полностью удалить действие create
.