gpt4 book ai didi

ruby-on-rails - 嵌套属性显示页面中的 Rails 表单

转载 作者:行者123 更新时间:2023-12-04 03:40:55 24 4
gpt4 key购买 nike

我有模型 ProjectProjectLine

projects/show 我有:

<%= @project.name %>

<% @project_lines.each do |project_line| %>

<%= project_line.description %>

<%= semantic_form_for project_line do |f| %>
<%= f.hidden_field :status, :value=>4 %>
<%= f.submit 'COMPLETE', class: 'btn btn-primary btn-md' %>
<% end %>
<% end %>

我想做的是,在项目显示页面上,显示一个项目及其项目线,并有一个按钮将 project_line 的状态更改为“完成”。

项目.rb

has_many :project_lines
accepts_nested_attributes_for :project_lines, reject_if: :all_blank, allow_destroy: true

project_line.rb

belongs_to :project

在 projects_controller 中:

def show
@project = Project.includes(:user).find_by_id(params[:id])
@project_line = ProjectLine.includes(:user).find_by_id(params[:id])
@project_lines = @project.project_lines
end

但它返回:

ActionView::Template::Error (undefined method `project_line_path' for #<#<Class:0x007f8235644f60>:0x0055eb72a0d4b8>
Did you mean? project_path
projects_path):
109: </div>
110:
111: <div class="col-sm-2">
112: <%= semantic_form_for project_line do |f| %>
113: <%= f.hidden_field :status, :value=>4 %>
114: <%= f.submit 'COMPLETE', class: 'btn btn-primary btn-md' %>
115: <% end %>

app/views/projects/show.html.erb:112:in `block in _app_views_projects_show_html_erb___4141078949623736805_47234864376780'
app/views/projects/show.html.erb:93:in `_app_views_projects_show_html_erb___4141078949623736805_47234864376780'
^[[Started POST "/__web_console/repl_sessions/440752809903b2f394f0a107e957670f/trace" for 127.0.0.1 at 2018-03-29 20:55:44 +0800

我该如何解决?

最佳答案

错误是说您没有对应于 project_line_path 的路线- 通常对应于 update project_lines 中的 Action Controller 。

这是 Rails 的默认设置,按照惯例将表单提交到 create非持久实例的操作,update对于坚持。

因此,您的问题是:

  • 您缺少处理表单的 Controller 和操作
  • 你希望你的表单提交到它的约定以外的地方

要解决第一个问题,请创建一个 product_lines包含 update 的 Controller 根据需要处理表单的操作,以及为此的路线(即 resources :product_lines, only: :update ,可能嵌套在产品 route )。

对于后者,您可以提供 url表单助手的参数,告诉它提交到哪里,即 <%= semantic_form_for project_line, url: your_custom_path do %>... .

最后,如果您想使用 Formtastic 的嵌套表单功能,您需要如下内容:

<%= @project.name %>

<%= semantic_form_for @project do |f| %>
<% @project_lines.each do |project_line| %>

<%= project_line.description %>

<%= f.semantic_fields_for project_line do |project_line_form| %>
<%= project_line_form.checkbox :status, value: 4, class: 'btn btn-primary btn-md' %>
<% end %>
<% end %>

<%= f.submit %>
<% end %>

请注意,这使用了嵌套产品线的复选框,这些产品线将与项目表单一起提交。我不确定这是您要采用的方法,所以会建议第一种方法,但我认为我会按照您提到的使用嵌套表单的方式将其弹出。

关于ruby-on-rails - 嵌套属性显示页面中的 Rails 表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49556024/

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