2

サブスクライバーモデルでdeviseを使用するRails 3アプリケーションがあります。加入者に best_in_place gem を使用してアカウント情報をその場で更新してもらいたいのですが、データベースを更新することができないようです。画面は更新されますが、データベースは更新されません。

このエラーは、既存のサブスクライバーが悪いことを示唆しているように見えますが、サブスクライバーが存在しない場合、そのサブスクライバーを更新することは不可能であるため、そうではありません。

私がやりたいことは、ユーザーが自分の詳細を表示するsubscriber/accounts#showページからその場で自分の情報を更新できるようにすることだけです.

私のサブスクライバー/アカウントコントローラーにはこれがあります:

    def update
      @subscriber = Subscriber.find(current_subscriber.id)
      @subscriber.update_without_password(params[:subscriber])
    end

サーバーログには常に次の結果が表示されます。

Processing by Subscribers::AccountsController#update as JSON
Parameters: {"subscriber"=>{"firstname"=>"Aarof"}, "authenticity_token"=>"Sx6kEQy4NC56ovikMs/D9nVPGJt1q5jNCoFnNjFhDu8=", "id"=>"2"}
Subscriber Load (1.9ms)  SELECT `subscribers`.* FROM `subscribers` WHERE `subscribers`.`id` = 2 LIMIT 1
CACHE (0.0ms)  SELECT `subscribers`.* FROM `subscribers` WHERE `subscribers`.`id` = 2 LIMIT 1
(0.2ms)  BEGIN
Subscriber Exists (0.4ms)  SELECT 1 AS one FROM `subscribers` WHERE (`subscribers`.`email` = BINARY 'frostsquid@yahoo.com' AND `subscribers`.`id` != 2) LIMIT 1
(0.1ms)  ROLLBACK
Redirected to http://localhost:3000/subscribers/accounts/2
Completed 302 Found in 12ms (ActiveRecord: 2.6ms)

私のショーページは次のようになります。

%p.subscriber-account-info
  =best_in_place @subscriber, :firstname, :path => subscribers_account_path(@subscriber)

サブスクライバーのルートは次のようになります。

       subscribers_accounts GET    /subscribers/accounts(.:format)                  subscribers/accounts#index
                            POST   /subscribers/accounts(.:format)                  subscribers/accounts#create
    new_subscribers_account GET    /subscribers/accounts/new(.:format)              subscribers/accounts#new
   edit_subscribers_account GET    /subscribers/accounts/:id/edit(.:format)         subscribers/accounts#edit
        subscribers_account GET    /subscribers/accounts/:id(.:format)              subscribers/accounts#show
                            PUT    /subscribers/accounts/:id(.:format)              subscribers/accounts#update

コンソールを使用してサブスクライバーのファーストネームを更新しようとしているのを確認したところ、サブスクライバーが存在するという同じメッセージを受け取り、トランザクションがロールバックされました。これはDeviseの何かが原因ですか?

4

1 に答える 1

2

ちょっとした答えかもしれませんが、JSONに対応していますか?ここに私たちのプロジェクトのサンプルコードがあります:

def update
    respond_to do |format|
      resource_files_service.update(@resource_file, params[:resource_file], current_user)

      format.html { }
  format.json { respond_with_bip(@resource_file) }
end
于 2012-07-30T10:24:12.567 に答える