2010-12-29 14 views
0

この質問は非常に簡単ですが、私は固執しているようです。Rails 3、行の特定の値を変更する

は、私たちはテーブル「ブック」

各ブックを持っていると言うことができます名前、説明、およびステータスを持っています。

リンクを表示ビューで作成したいとします。リンクをクリックすると、ステータスが変更されます(例:「読み取り」)。 <% =のlink_to「読む」:

def read 

    @book = Book.find(params[:id]) 
    @book.status = "Read" 
    @book.update_attributes(params[:book]) 

    respond_to do |format| 
    format.html { redirect_to :back} 
    format.xml { render :xml => @book } 
    end 

end 

は、その後、私は似ているビューへのリンクを追加しました:言うこれまでのところ、私は、コントローラ内のブロックを追加しようとしました

、 、read_book_path(@book)、:method =>:put%>

これはまったく機能しません。私はそれを私のルートに加えましたが、それは重要ではないようです。

助けがあれば助かります。ありがとう!

-Elliot

EDIT:あなたがやろうとしているすべての本にstatus属性を設定し、更新されていない場合は未定義のメソッド `read_book_path」

答えて

2

あなたは読みと呼ばれる方法を定義する必要があります(@book)、:remote => true%>

それが作品たら

resources :books do 
    member do 
    get 'read' 
    end 
end 

、混乱は周りに方法を変更すると::

とroutes.rbをでは

+0

を入れてちょっとセス、答えてくれてありがとう!あなたが言ったように正確に試してみたとき、私は同じNoMethodErrorを得るようです: "未定義のメソッド' read_book_path 'for " – Elliot

+0

実際には、うまくいきました!私はメンバーの代わりに私のルートでコレクションを持っていた!ありがとう! – Elliot

+0

複数形を再確認してください。 resourceS:bookS。コンソールから "rake routes"を実行して投稿してください。 – sethvargo

0

:私はNoMethodErrorを取得しています追加するのを忘れその他のパラメータは、update_attributesを呼び出す必要はありません。

変更:

@book.update_attributes(params[:book]) 

へ:

def read 
    @book = Book.find(params[:id]) 

    @book.status = "Read" 
    @book.save 
end 

が次にあなたが<% =のlink_to "読む" したい、read_book_pathを:

@book.save! 
関連する問題