データベースに 2 つのブール値 (管理者と読み取り専用) を含むユーザー モデルがあります。基本的に、これにより 3 レベルのアクセス (読み取り専用、編集可能、および管理者) を持つことができます。
管理者が他のユーザーの権限を編集できる画面があります。admin と readonly のブール値の 2 つのチェックボックスを用意する代わりに、f.select を使用してドロップダウンを作成し、「permission」という仮想属性を作成しました。
権限に関する限り、ユーザーを保存するとすべてが正常に機能します。唯一のことは、特定のユーザーの編集ページに移動したときに、ドロップダウンでユーザーの実際の権限を持つページをロードしないことです。ドロップダウンの最初の値をデフォルト値としてロードするだけです。
ユーザー編集ページを最初にロードするときに、このドロップダウンにユーザーの実際の権限が表示されるようにするにはどうすればよいですか?
User モデルの仮想属性コードは次のとおりです。
# get the permission
def permission
if self.read_only
@permission = 'readonly'
elsif self.admin
@permission = 'admin'
else
@permission = 'editable'
end
end
# Set the permission.
def permission=(value)
p "VALUE = #{value}"
if value == 'readonly'
self.read_only = true
self.admin = false
@permission = 'readonly'
elsif value == 'admin'
p "INSIDE admin"
self.read_only = false
p "before #{self.admin}"
self.admin = true
p "after #{self.admin}"
@permission = 'admin'
elsif value == 'editable'
self.read_only = false
self.admin = false
@permission = 'editable'
end
end
そして、これが私のフォームビューでの私の f.select です:
<%= f.select :permission, options_for_select([['Admin', 'admin'], ['Read Only', 'readonly'], ['Editable', 'editable']], {:disabled => @permissions_disabled}) %>
collection_select を使用してみましたが、リストにデータを入力する方法がわかりませんでした。