我有模型用户和组,以及使用has_many:through方法的连接表Membership。在我的连接表格中,我希望用户输入管理员创建的有效组名称,以成为该组的成员。用户和组连接模型验证
我已经得到了一个有效的名字输入工作的情况,但现在我需要一些验证,如果他们输入一个空白的文本框,或输入的组名称存在于数据库中,我想要一些不错的错误消息。我认为这可能通过一些验证方法?
成员局部_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 %>
membership.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
这是验证输入组名,我想在我的会员制模式的一些验证,就好像我发布一个空的文本框,或文本框中有一个不存在的名称,它会失败,并出现错误:被调用的ID为零,这将错误地为4 - 如果你真的想要的ID为零,请使用object_id – Norto23 2012-02-08 22:07:47
好吧,我现在明白了。你可以发布控制器代码吗? – 2012-02-09 15:50:51
已经增加了create方法的控制器代码,谢谢。 – Norto23 2012-02-09 21:35:11