编辑后,发布仍然没有更新

时间:2014-01-07 10:32:34

标签: ruby-on-rails ruby url hyperlink routes

我刚学习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 %>

4 个答案:

答案 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; < /强>