0

ruby on railsで困っています。ユーザーが/homepage/にアクセスするとき、現在のユーザーのストアIDを0にし、ユーザーが/homepage/:id/にアクセスするときに、ユーザーのストアIDをURLの入力IDにしたい。

私のコード:

routes.rb:
  match "/homepage" => "users#access", :as => "store"
  match "/homepage/:id" => "users#homepage", :as => "store"

def access
  @user = current_user
  @user.update_attributes(:store => "0")
  @user.save
end

def homepagestore
  @user = current_user
  @user.update_attribute(:id, user.store = :id)
  @user.save
end
4

1 に答える 1

2

update_attributeは、データベース内のレコードを更新します。ただし、検証チェックはスキップされます。update_attributesは、データベース内のレコードも更新 (保存) します。検証をスキップしません。

そう:

  1. params[:id]セルジオが言うように使用する必要があります
  2. update_attributes検証チェックをスキップしないため、代わりに使用することをお勧めします
  3. またはsaveを使用する場合、メソッドは必要ありませんupdate_attributeupdate_attributes

私の提案:

def access
  @user = current_user
  @user.update_attributes(:store => "0")
end

def homepagestore
  @user = current_user
  @user.update_attributes(:store => params[:id])
end

追加された update_attributes は、一括割り当て保護システムを使用します。したがって、 User モデルの attr_accessible 呼び出しで :store フィールドを変更できるようにする必要があります。または、保護をオーバーライドします。 update_attributes ドキュメントを参照してください。さらに質問がある場合は尋ねてください。

于 2012-06-11T17:53:19.523 に答える