我有模型用戶和組,以及使用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