【发布时间】: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