0

データベースに 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 を使用してみましたが、リストにデータを入力する方法がわかりませんでした。

4

2 に答える 2

2

Rails f.selectで述べられているように、ドロップダウンの変更を無効にしようとすると、は必要ありませんoptions_for_select。それを削除して4番目のパラメーターにselectedオプションを渡すと、設定する必要があります。

<%= f.select :permission, [['admin', 'Admin'], ['readonly', 'Read Only'], ['editable', 'Editable']], { selected: 'readonly' }, { disabled: @permissions_disabled } %>

ただし、上記のコードを指定すると、selectedオプションがなくても、f.object.permissionが正しい値を返す限り、問題はありません。

于 2013-03-11T06:55:12.800 に答える
0

これを最後のオプション ハッシュに追加してみてください。:selected => @user.permission

例えば:

<%= f.select :permission, options_for_select([['Admin', 'admin'], ['Read Only', 'readonly'], ['Editable', 'editable']], {:disabled => @permissions_disabled, :selected => @user.permission}) %>
于 2013-03-11T06:49:37.180 に答える