Rails, список флажков has_many - имя поля формы? - PullRequest
0 голосов
/ 10 марта 2011

У меня есть объект модели пользователя, предположим,

class User < ActiveRecord::Base
  has_many :permissions
end

и

class Permission > ActiveRecord::Base
  attr_accessible :user_id, :permission_name

Очевидно, что на столе есть идентификатор, но мы действительно не заинтересованы в этом столбце. Настоящий первичный ключ - user_id +missions_name. Иностранный ключ по умолчанию: user_id

Мы пытаемся создать флажки для каждого разрешения и не можем сделать это в цикле ...

Может кто-нибудь объяснить, как rails создает имя для флажка:

 user.permissions where permission.permission_name == "some string"

или как мы могли бы вызвать метод check_box_tag в файле .erb так, чтобы он мог отображать определенный флажок, скажем, где аргумент_имя 'ted'?

В этот момент я немного отчаялся. Я нашел много примеров, в которых предполагается, что первичным ключом является поле 'id', и что я просто хочу просмотреть список разрешений, но нигде не вижу примера без цикла и не использую идентификатор в качестве первичного ключа.

спасибо заранее!

edit: я понимаю, что в таблице, где есть много разрешений для многих пользователей, само имя_представления недопустимо в качестве первичного ключа, но для наших целей в форме в случае нового пользователя user_id не существует и для каждого пользователя может быть только один из каждого типа access_name ... может быть, primary_key - это даже не то, что нам нужно в этом случае?

1 Ответ

0 голосов
/ 10 марта 2011

Полагаю, вы ищете формостатический камень .

Контроллер:

@permissions = Permission.where(:permission_name => "ted")

или

@permissions = @user.where(:permission_name => "ted")   

Это зависит от того, что вы действительно хотите.

Просмотр (упрощенный):

<%= semantic_form_for :user, :url => some_path(@user) do |f| %>
  <%= f.input :permissions, :as => :check_boxes, :collection => @permissions %>
  <%= f.commit_button %>
<% end %>

В вашей модели, например user.rb, вам нужно добавить:

accepts_nested_attributes_for :projects
...