当前位置: 首页 > 知识库问答 >
问题:

RoR-新的更新操作

杨晓博
2023-03-14

我有两种型号

Client.rb
  has_many :addresses
  accepts_nested_atributes_for :addresses


Address.rb
  has_many :addresses

我在ClientsController上创建了一个新的动作update_establishments,以便向客户端添加新的机构。

ClientsController.rb

   #the corresponding view of this action will render the locations_form
   def add_establishments
    @client = Client.find(params[:id])
    @client.addresses.build
   end

   def update_establishments
    create_zip
    respond_to do |format|
      if @client.update(client_params)
        set_zip
        format.html { redirect_to @client, notice:'Establishment added.'}
        format.json {head :no_content}
      else
        format.html { render action: 'edit'}
        format.json { render json: @client.error, status: :unprocessable_entity }
      end
    end
   end


locations_form

   %= form_for @client, :url=>{:action=>'update_establishments'}, html:{ :method =>"patch"}  do |form| %>

我有两个问题:

1-呈现表单时,表单为地址呈现两个独立的字段,一个包含现有地址的值,另一个用于添加新地址。我怎样才能不提供现有地址?

2-由于@客户端为零,因此在更新_机构操作中出现明显错误。是否有一种方法可以将客户机本身从表单发送到操作,或者我必须添加带有值的隐藏字段?

共有1个答案

岑俊明
2023-03-14

问题1,当您调用@客户端时。地址。build它正在为客户端构建第三个地址。我猜你会在表格上显示所有三个地址。

问题2,您将希望发送带有请求的客户端标识,并使用它来查找客户端。

接下来应该会解决这两个问题。

尽可能多地(几乎总是可能的)坚持标准的Rails控制器操作。非标准的控制器操作,如添加设置更新设置通常是一种迹象,表明有一种更“轨道”的方式来模拟控制器。

在这种情况下,我会问为什么clientscontoler在处理机构。如果您添加一个机构控制,我猜事情将刚刚开始工作。以下是如何做到这一点:

在配置/routes.rb中,创建具有嵌套机构资源的客户端资源。

resources :clients do
  resources :establishments
end

这将为您提供一些嵌套的路由,这些路由都将从 /clients/:client_id/机构开始。

创建一个InstishmentsController并将add_establishmentsupdate_establishments移动到它。将add_establishments重命名为new并将update_establishments重命名为更新。还要移动相应的视图以 /views/establishments/并重命名它们以匹配它们的新操作名称。

如果没有令人信服的理由在new操作中找到客户机,您可以构建一个新的机构来传递给视图。无论哪种方式,您的表单都将与此新机构关联,而不是与现有客户关联。(问题1)

update中,您将使用:client_id参数查找客户机。(问题2)update需要一点按摩,但我需要知道你是真的一次更新多家机构,还是只更新一家机构,看看会是什么样子。(您不会更新@client本身,而是更新客户的机构。)

 类似资料:
  • 主要内容:添加新函数,获取最新更改在本文章教程中,我们将演示如何查看 Git 存储库的文件和提交文件记录,并对存储库中的文件作修改和提交。 注意:在开始学习本教程之前,先克隆一个存储库,有关如何克隆存储库,请参考: http://www.yiibai.com/git/git_clone_operation.html 执行克隆操作,并得到了一个新的文件:。想知道谁将这个文件修改变提交到存储库中,那么可以执行命令,为了更好的演示,开发

  • 任何数据库上的UPDATE操作都意味着更新一个或多个已在数据库中可用的记录。 以下过程将SEX的所有记录更新为“M”。 在下面的例子中,我们将所有男性的年龄增加一年。 例子 (Example) /* Main program */ Call RxFuncAdd 'SQLLoadFuncs', 'rexxsql', 'SQLLoadFuncs' Call SQLLoadFuncs if SQL

  • 我正在制作一个由任务管理器组成的应用程序。 在此任务管理器中,收件箱列表中有3个列表(收件箱、今天和星期),其中仅显示不带类别的任务,而在其他两个列表中,分别显示今天和本周的带类别或不带类别的任务。 我希望能够更改三个列表中一个任务的类别。因此,如果我更改收件箱任务的类别(不应该有类别),整个表都应该更新,任务应该从列表中删除。 我调试了程序,任务被正确地从列表中删除,但只有类别的单元格被更新,而

  • 问题内容: 猫鼬架构: Upsert操作: 当我UPSERT 或默认模式值和总是更新不管文档插入或更新。使用时是相同的(当然,我不传递日期)。 我似乎没有发现任何东西可以说明这是否是预期的行为。我希望日期仅在插入时添加,而不更新,除非明确设置。 问题答案: 如果您正在寻找预期行为的“证明”,那么除了源代码本身之外,别无所求。特别是在主要定义内: 因此,您可以看到所有的中间件处理程序都已为每个“ u

  • 本文向大家介绍postgresql 两表关联更新操作,包括了postgresql 两表关联更新操作的使用技巧和注意事项,需要的朋友参考一下 我就废话不多说了,大家还是直接看代码吧~ 补充:Postgresql 连表更新字段语法 update 下面这段sql本来目的是想更新条件下的数据,可是这段sql却更新了整个表的数据。sql如下: 正确的写法有多种,如下方法也能够实现正确的数据库修改: 以上为个

  • 问题内容: 我不确定是否在批量索引编制中正确使用了该操作。 我的要求是: 网址是: 我想我错过了文档中的某些内容,但仍然找不到如何进行此操作的方法。 我想要 在索引中创建以上文档,或者如果存在则对其进行更新。 问题答案: 如果您通过批量API将索引中的记录添加为 那么如果该ID已经存在于索引中,您将获得一个异常。如果要添加或 替换 文档(取决于文档是否存在),则应按以下方式进行请求 如果已经存在具