У меня есть модели User и Group, а также таблица присоединения Membership, в которой используется метод has_many: through.В форме таблицы присоединения я хочу, чтобы пользователь ввел действительное имя группы, созданное администратором, чтобы стать членом этой группы.
Я получил случай, когда действительное имя введено для работы, но теперь мне нужна некоторая проверка, если они вводят пустое текстовое поле, или что введенное имя группы существует в базе данных, я хотел бы немного приятноСообщения об ошибках.Я думал, что это будет возможно с помощью некоторого метода validates?
частичное членство _form.html.erb
<%= form_for(@membership) do |f| %>
<% if @membership.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@membership.errors.count, "error") %> prohibited this membership from being saved:</h2>
<ul>
<% @membership.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :group %><br />
<%= f.text_field :group %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
members.rb
class Membership < ActiveRecord::Base
belongs_to :group
belongs_to :user
attr_accessible :user_id, :group_id
validates_uniqueness_of :group_id, :message => "can be only joined once", :scope => 'user_id'
validates_presence_of :group, :user
end
group.rb
class Group < ActiveRecord::Base
has_many :memberships, :dependent => :destroy
has_many :users, :through => :subscriptions
validates :name, :presence => true, :uniqueness => true
attr_accessible :name, :expiry
end
Так что нужно какое-то направление относительно того, как происходит валидация, потому что вышеприведенная валидация в моделях членства и групп не работает, яполучить ошибку как для пустого текстового поля, так и для имени, которого нет в базе данных ...
Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id
Редактировать: Добавлен код контроллера ниже
def create
@group = Group.find_by_name(params[:membership][:group])
@membership = current_user.memberships.build(:group_id => @group.id)
respond_to do |format|
if @membership.save
format.html { redirect_to membership_url, :notice => 'Membership was successfully created.' }
format.json { render :json => @membership, :status => :created, :location => @membership }
else
format.html { render :action => "new" }
format.json { render :json=> @membership.errors, :status => :unprocessable_entity }
end
end
end