【问题标题】:Rails editing model from different controller来自不同控制器的 Rails 编辑模型
【发布时间】:2018-06-07 18:53:29
【问题描述】:

我有一个带有相应文章模型的文章控制器。
我还有一个名为 Review 的不同控制器。

它们没有关联或关联。

我正在尝试从评论控制器编辑文章帖子,但无法做到。

class ReviewsController < ApplicationController
    def index
        @article = Article.all
    end

    def show
        @article = Article.find(params[:id])
    end


    def edit
        @article = Article.find(params[:id])
    end

    def update
        raise params.inspect
        # @article = Article.find(params[:id])
        # if @article.update_attributes(article_params)
        #   # Handle a successful update.
        # else
        #   render 'edit'
        # end
    end

    private
    def article_params
      params.require(:article).permit(:title, :body, :url,
                                   :tags, :news_date, :status)
    end

end

评论/edit.html.erb

<div class="row">
  <div class="col-md-6 col-md-offset-3">

    <%= form_tag review_path(@article), method: "put" do %>
      <label>Article title:</label><br>
      <%= text_field_tag :title, @article.title %><br>

      <label>Article Description</label><br>
      <%= text_area_tag :body, @article.body %><br>

      <%= submit_tag "Submit Post" %>
    <% end %>   

  </div>
</div>

在提交操作时,为什么我特别要求将表单方法设置为PUT时发送POST请求?

routes.rb

resources :reviews, only: [:index, :show, :edit, :update]
scope module: 'api' do
    namespace :v1 do
        resources :articles, only: [:index, :show]
    end
end

>$ bundle exec rake routes
     Prefix Verb  URI Pattern                 Controller#Action
    reviews GET   /reviews(.:format)          reviews#index
edit_review GET   /reviews/:id/edit(.:format) reviews#edit
     review GET   /reviews/:id(.:format)      reviews#show
            PATCH /reviews/:id(.:format)      reviews#update
            PUT   /reviews/:id(.:format)      reviews#update
v1_articles GET   /v1/articles(.:format)      api/v1/articles#index
 v1_article GET   /v1/articles/:id(.:format)  api/v1/articles#show

【问题讨论】:

  • 您可能应该使用 form_for,因为您在某个对象上使用它。
  • 我先尝试过,但后来我在 edit.html.erb 本身中得到了 undefined method 'article_path'form_for(@article)
  • 是的,因为 form_for 会根据对象推断 url,但您可以通过以下方式指定 url:form_for (@article, url: review_path(@article), method: 'put') do |f|
  • 好的。就这样完成了。但是更新操作不起作用。收到的错误是一样的。
  • 我不确定你认为你想在这里做什么。在任何情况下,评论控制器的路由是什么样的?你为什么要颠覆常规的 Rails 范式?这会导致很多混乱。

标签: ruby-on-rails ruby ruby-on-rails-5


【解决方案1】:

您可以在这里找到答案: https://apidock.com/rails/ActionView/Helpers/FormTagHelper/form_tag

":method - 提交表单时使用的方法,通常是“get”或“post”。如果使用“patch”、“put”、“delete”或其他动词,则带有名称的隐藏输入_method 被添加来模拟动词 over post。”

【讨论】:

  • 很抱歉,不确定您当时要达到的目标。但是您的问题“为什么当我特别要求将表单方法设置为 PUT 时它发送 POST 请求”的答案在我的回答中。现在我不确定你可以强迫它做不同的事情。它说它在帖子上模拟动词,即在帖子上模拟您的“放置”,问题可能在您的路由中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-15
  • 1970-01-01
  • 2019-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多