我刚学习Ruby on rails大约2周,我是初学者,所以对我来说这很难。
我创建了一个使用created_at属性建立链接的博客,例如:
http://localhost:3000/posts/2014/01/07
我的问题是当我尝试编辑帖子时,我可以编辑但不会更新。 我有一个帖子“你好”,当我把它编辑成“Hello world”时,它仍然是“你好”。
这是我的文件:
的routes.rb
get "posts/homepage"
root 'posts#homepage'
resources :posts
match 'posts/:year/:month/:day', to: 'posts#show', via: [:get, :patch]
posts_controller.rb
def show
@post = Post.find_by(params[:year], params[:month], params[:day])
end
def edit
@post = Post.find(params[:id])
end
def update
@post = Post.find(params[:id])
if @post.update(post_params)
redirect_to @post
else
render 'edit'
end
end
post.rb
def to_param
created_at.strftime('%Y/%m/%d')
end
抱歉,因为我的英语不好,这让我很头疼......我对路线了解不多
这是app \ views \ posts_form.html.erb,我'渲染'此表格用于操作新功能和修改
<%= form_for @post do |form| %>
<% if @post.errors.any? %>
<div id='error_explanation' %>
<div class='alert alert-danger'><h3>エラーがあります、チェックしてください。</h3></div>
<ul>
<% @post.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<p><%= form.text_area :text, cols: 75, rows: 15 %></p>
<p>
<%= link_to 'ホーム', root_path, class: 'btn btn-primary btn-lg', style: 'width: 100px' %>
<%= link_to '日記一覧', posts_path, class: 'btn btn-info btn-lg', style: 'width: 100px' %>
<%= form.submit :'登録する', class: 'btn btn-success btn-lg', style: 'width: 100px' %>
</p>
<% end %>
答案 0 :(得分:1)
我从未见过在此上下文中使用的update
方法 - 它是一个类方法,需要id作为第一个参数。
执行此操作的标准方法是:
def update
@post = Post.find(params[:id])
@post.assign_attributes(post_params)
if @post.save
redirect_to @post
else
render 'edit'
end
end
如果仍然无效,请检查post_params
方法 - 允许删除指定列表中未列出的所有密钥。
答案 1 :(得分:0)
试试这个
def update
@post = Post.find(params[:id])
@post.update(post_params)
if @post.save
redirect_to @post
else
render 'edit'
end
end
答案 2 :(得分:0)
您是否在post_controller中定义了post_params?
private
def post_params
params.require(:post).permit!
end
(如果这有效,则需要将.permit!更改为属性列表)
您可以查看运行rails服务器的控制台,并检查发布时是否有错误吗?
答案 3 :(得分:0)
也许你的routes.rb错了,试试这个
修补程序&#39;发布/更新&#39; 而不是发布&更新&#39; 。
只有当你的form_for没有方法选项但是你的form_for有一个方法时才适用,
form_for @article, url: {action: "update"}, method: "post" do |f|...
然后在您的routes.rb中,您将使用此帖子&#39;发布/更新&#39; 而不是补丁&#39;发布/更新&#39; < /强>