2014-01-07 26 views
0

我剛剛在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 

對不起,因爲我的英語不好,這使我頭痛......我c an't太瞭解路線

這是應用程序\意見\ 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

什麼是'post_params'? – user2503775

+0

對不起,我忘了,post_params是posts_controller方法 '私人 高清post_params params.require(張貼).permit(:文本) end' –

+2

嘗試'@ post.update_attributes(post_params)' – user2503775

回答

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方法 - 許可刪除未在給定的列表中列出的所有鍵。

+0

謝謝,但它不工作。我已經嘗試了3天。 如果我使用正常的鏈接'http:// localhost:3000/posts/1/edit'確定,但是當我切換到'http:// localhost:3000/posts/2014/01/07/edit'時,它可以編輯但不更新 –

0

試試這個

def update 
    @post = Post.find(params[:id]) 
    @post.update(post_params) 
    if @post.save 
     redirect_to @post 
    else 
     render 'edit' 
    end 
end 
+0

**感謝**,但它仍然不工作:( –

0

是否定義在post_controller的post_params?

private 
    def post_params 
     params.require(:post).permit! 
    end 

(如果這個工程,你需要改變.permit!到屬性列表)

你可以看一下,你運行軌道服務器控制檯,並檢查是否有錯誤時,你張貼?

+0

是的,我有。在第一次它爲我工作,但因爲我已經改變了路線,並將此代碼插入到post.rb: 'def to_param created_at.strftime('%Y /%m /%d') end'它不能正常工作 –

+0

你能從控制檯得到rails服務器日誌嗎? –

+0

我怎麼能得到它? 對不起,我剛剛學會RoR爲10天,請教我 –

0

也許你的routes.rb是錯誤的,試試這個 補丁「後/更新」,而不是後「後/更新」
這將是隻適用,如果你的的form_for沒有一個方法的選擇,但如果你的form_for有一個方法例如,

form_for @article, url: {action: "update"}, method: "post" do |f|...

然後在你的routes.rb,youre去使用這個後「後/更新'而不是補丁'post/update'

相關問題