【问题标题】:Weird redirection when updating datas更新数据时奇怪的重定向
【发布时间】:2017-01-11 07:49:58
【问题描述】:

我通过 Rails 命令rails g portfolio titre:string, thumbnail:string lien:string description:text 为投资组合生成了一个脚手架。我还添加了 FriendlyId 以获得更好的 URL,仅此而已。这是“更新”操作。

  def update
    if @portfolio.update(portfolio_params)
      redirect_to @portfolio, notice: 'Portfolio mis à jour.'
    else
      render :edit
    end
  end

但是,当尝试更新我的投资组合中的项目时,提交按钮会尝试通过补丁访问“portfolio#update”,但会添加一个“.”。而不是 '/' 这给了我No route matches [PATCH] "/portfolios.test-1"

路线,我只有resources :portfolios

编辑:添加表单

<%= form_for @portfolio, url: portfolios_path(@portfolio) do |f| %>
  <% if portfolio.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(portfolio.errors.count, "error") %> prohibited this portfolio from being saved:</h2>

      <ul>
      <% portfolio.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :titre %>
    <%= f.text_field :titre %>
  </div>

  <div class="field">
    <%= f.label :categorie %>
    <%= f.text_field :categorie %>
  </div>

  <div class="field">
    <%= f.label :description %>
    <%= f.text_area :description %>
  </div>

  <div class="field">
    <%= f.label :thumbnail %>
    <%= f.file_field :thumbnail %>
  </div>

  <div class="field">
    <%= f.label :lien %>
    <%= f.text_field :lien %>
  </div>

  <div class="actions">
    <%= f.submit 'Enregistrer' %>
  </div>
<% end %>

我没有任何其他可能做@portfolio, url: portfolios_path(@portfolio),否则Rails 认为'@portfolio' 是nil

编辑 2:添加了私有“set_portfolio”参数

private
  # Use callbacks to share common setup or constraints between actions.
  def set_portfolio
    @portfolio = Portfolio.friendly.find(params[:id])
  end

我的应用有什么问题?

【问题讨论】:

  • 我们能看到表单的代码吗?
  • 我更新了我的问题

标签: ruby-on-rails updates scaffolding


【解决方案1】:

portfolios_path是采集路径。

更改它portfolio_path 应该修复它。

&lt;%= form_for @portfolio, url: portfolio_path(@portfolio) do |f| %&gt;

我想您也将使用此表单来创建新的投资组合,因此将其更改为 &lt;%= form_for(@portfolio) %&gt; 应该可以修复它并且也适用于这两种情况。 form_for 将提交到正确的路径。

【讨论】:

  • 现在我得到No route matches {:action=&gt;"show", :controller=&gt;"portfolios", :id=&gt;nil} missing required keys: [:id],同时定位到我放置form_for 的行。我相信 Rails 不明白这是“新”动作而不是“表演”
  • 困扰我的是我尝试了很多东西,我记得尝试过这个,即使它失败了。现在好了,谢谢!
猜你喜欢
  • 2015-12-20
  • 2017-12-24
  • 2013-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-28
相关资源
最近更新 更多