我是Ruby on Rails的新手,我试图找出我的代码失败的地方。我创建了一个Articles表,所以当我去articles/new的时候,如果我点击提交按钮后有视图来创建文章,它不会去/articles,而是在终端,它显示了一个帖子请求。
我创建了一个表articles和Model Article沿着article_controller类,还在路由中添加了资源:articles
但是当我访问articles/new并使用表单创建新的article时,我可以看到由于article_path上的POST请求,控制器中的create fn被调用(/articles/)(因为我尝试将文章保存到db中,它确实被保存了)但是当我尝试使用render plain: @articles.inspect
显示文章详细信息时,什么也没有发生,即使在点击提交按钮后,它仍然在/articles/new上。(即使create fn为空,它也会停留在该页面上)。请救救我!
控制器
class ArticlesController < ApplicationController
def show
@article = Article.find(params[:id])
end
def index
@articles = Article.all()
end
def new
end
def create
render plain: @article.inspect
end
end
型号
class Article < ApplicationRecord
validates :title, presence: true, length: {minimum: 3, maximum: 50}
validates :description, presence: true, length: {minimum: 10, maximum: 100}
end
新建表单
<h1>Create an Article <h1>
<%= form_with scope: :article, url: articles_path, method: :post, local: true do |f| %>
<p>
<%= f.label :title %><br/>
<%= f.text_field :title %>
</p>
<p>
<%= f.label :description %><br/>
<%= f.text_area :description %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>
索引页
<h1>Showing All Articles</h1>
<table>
<thead>
<tr>
<th>Title</th>
<th>Description</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<% @articles.each do |article|%>
<tr>
<td><%= article.title%></td>
<td><%= article.description%></td>
<td>PlaceHolder</td>
</tr>
<% end %>
</tbody>
</table>
1条答案
按热度按时间ar5n3qh51#
我不能完全复制你的问题,但我认为你正在追求一个错误的方法,因此我张贴一个答案。
对于
create
操作为空的场景,浏览器将停留在articles/new
页面上是预期的行为,因为它没有得到render
或redirect
响应,所以它没有什么可做的。对于
create
呈现render plain: @article.inspect
的场景,我希望它呈现带有文本“nil”的空页面,它做到了。这是因为@article
从未被初始化,并且示例变量不会引发未定义变量错误,而是返回nil
。所以我无法复制你的确切行为(停留在页面上),如果你想花更多的时间在浏览器中检查响应。然而,作为初学者,你不应该手动创建你的模型,视图,控制器,而是使用脚手架。通过这种方式,您将在创建到您的文章的详细信息后获得重定向的工作示例,并且通过在重定向URL中的简单更改,您可以使其转到索引页面。