0

私はレールに構築している非常に小さなアプリケーションを持っています。シンプルなウェイトトラッカーアプリです。Userサインアップページのあるモデルを作成しました。ユーザーがログインすると、user#showビューにリダイレクトされます。これまでのユーザーコントローラーは次のとおりです。

class UsersController < ApplicationController
before_filter :authenticate_user!

def show
  @user = current_user
end

end

他に2つのモデルがあります。1つはWeightモデルで、もう1つはモデルですGoal。ユーザーがサインアップすると、現在の体重と目標体重を入力するように求める画面が表示され、この情報が保存されます。Weightとモデル、およびGoalログインしたユーザーID。

これまでのところ、ユーザーshow.html.erbテンプレートにフォームを追加することができました。

<%= form_for @user do |f| %>

  <%= f.fields_for :weight do |builder| %>
    <fieldset>
      <%= f.label :value, "Current weight" %><br />
      <%= f.text_field :value %><br />
    </fieldset>
  <% end %>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

これはフォームを正しくレンダリングしますが、送信ボタンをクリックすると、エラーページに移動して「 。」と表示されますUnknown action- The action 'update' could not be found for UsersController。iMがcreateアクションに送信しようとするため、何か間違ったことをしていると思います。

正しい道に戻るのを手伝ってくれる人はいますか?

4

3 に答える 3

2

これは、すべてのモデルとは関係ありません。updateこれは、コントローラーでメソッドを定義していないという事実に関係しています。

それが完了したら、モデルをネストする場合は、 accepts_nested_attributes_forを調べます。

それに加えて、showページには通常、オブジェクトの読み取り専用が表示されます。ページには、オブジェクトのedit編集可能なフォームがあります。

于 2013-02-26T20:03:05.553 に答える
0

form_forRailsヘルパーを使用し@userてそれに渡しています。これ@userは永続的なモデル(データベースに保存されている)であるため、生成されたフォームには/users/:idwithPUTメソッドのアクションが含まれるため、リクエストはupdateあなたUsersControllerの名前の付いたアクションに送信されます.あなたの中でそのアクションが定義されていないUsersController

次のようになります。

def update
  @user = Users.find(params[:id])
  if @user.update_attributes(params[:user])
  # do something if saving succeeds
  else
  # do something if saving fails
  end
end
于 2013-02-26T20:09:09.650 に答える