gpt4 book ai didi

ruby-on-rails - 带有命名空间模型名称的 Rails form_for

转载 作者:行者123 更新时间:2023-12-04 17:02:02 25 4
gpt4 key购买 nike

我有一个嵌套资源 projects/tasks/newform_for但我不知道如何自动生成所需的 URL:

module Projects
class Project < ApplicationRecord
has_many :tasks
end
end

module Projects
class Task < ApplicationRecord
belongs_to :project
end
end

# in view files
<%= form_for [@project, @task] do |f| %> # => produces URL of projects_project_tasks_path

我想要的 URL 是 project_tasks_path ,但 form_for正在使用命名空间 Projects::Project作为 URL 前缀。

我目前的解决方案是单独使用 new.html.erbedit.html.erb查看手动指定 URL 的文件:
# new.html.erb
<%= form_for @task, url: project_tasks_path(@project) do |f| %>
<%= render "form", f: f %>
<% end %>

# edit.html.erb
<%= form_for @task, url: project_task_path(@project, @task) do |f| %>
<%= render "form", f: f %>
<% end %>

这有效,但会复制不必要的代码。请注意,我将嵌套资源用于新建和编辑操作,因为我必须在任务资源上拥有项目上下文。

我如何拥有 form_for生成所需的 URL 并有一个 form.html.erb文件而不是 2?

最佳答案

您可以通过覆盖模型名称来实现:

class Projects::Project < ApplicationRecord
def model_name
ActiveModel::Name.new(self, nil, "Project")
end
end

class Projects::Task < ApplicationRecord
def model_name
ActiveModel::Name.new(self, nil, "Task")
end
end

这会改变 Projects::Project.model_name.param_key这是用于从 projects_project 生成 url 的属性至 project .

看:
  • ActiveModel::Name
  • 关于ruby-on-rails - 带有命名空间模型名称的 Rails form_for,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47623255/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com