管理者が自分のWebサイトでユーザーを承認できるようにする簡単なリンクを作成しようとしています
この男が試みていたものと非常によく似ています:Rails 3では、button_toを使用してブール値を変更するにはどうすればよいですか?
これがどのように機能するはずだったかです:
- 管理者はリンクをクリックしてユーザーを承認します
- リンクはUsersControllerのアクティブ化関数を呼び出します
- ユーザーがモデル化するアクティブな関数呼び出し
- ユーザーモデルは、承認された属性をtrueに更新し、それを保存します
これが私がやろうとしていた方法です
私のusers#indexビューで
<% @users.each do |user| %>
<%= link_to 'Approve', :action => "index", :method => 'activate', :id => user.id, :class => 'btn btn-mini btn-danger' %>
<% end %>
私のuserControllerで
def activate
@user = User.find(params[:user])
@user.activate_user
end
私のユーザーモデルでは
def activate_user
self.approved = 'true'
self.save
end
と私のルート
devise_for :users, :controllers => { :registrations => "registrations" }
resources :users do
member do
get 'activate'
put 'activate'
end
end
match "users/:id/activate" => "users#activate"
リンクをクリックすると(ユーザーを承認するため)、ユーザーインデックスページに戻りますが(想定どおり)、ユーザーフィールド「承認済み」はまだfalseに設定されています:I
リンクをクリックした後に取得するURL:
http://localhost:3000/users?class=btn+btn-mini+btn-danger&id=2&method=activate
何か案は?
アップデート
提案されたように、ivはlink_toヘルパーにURLを追加しました
<% @users.each do |user| %>
<%= link_to "Approve", :controller => "users", :id => user.id, :action => "activate", :method => :put, :approved => true %>
<% end %>
ヘルパーリンクをクリックすると、
wrong number of arguments (1 for 2)
app / controllers / users_controller.rb:7:in `activate'
def activate
@user = User.find(params[:id])
@user.update_attribute(params[:user])
redirect_to "/users?approved=false"
end
エラーが@user.update_attribute(params [:user])である7行目
他に何を置くべきですか?
ああ、これがこの方法の私のルートです
match "/users/:id/activate" => "users#activate"
UPDATE V2 だから、私はその更新行を次のように変更しました:
@user.update_attributes(@user.approved, "true")
値をtrueに変更する以外は、やりたいことはすべて実行しているようです。
私はまた、true(およびupdate_attribute関数)と非文字列に1を使用しようとしました..ここでアイデアが不足しています笑
ソリューション
これは厄介ですが、私のユーザーモデルattr_accessor :approved
では、モデルがデータベースに移動して:approved
列を更新することはありませんでしたが、代わりにローカル変数が更新された:approved
ため、次に列を確認したときに、もちろん:approved
値は変更されていません
tldr?モデルにattr_accessorがあり、更新しようとしている列と同じ名前の場合=>削除します