- user and group join model validation
- <%= 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 %>
- 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
- 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
- validate_uniqueness_of :name, :message => "a group already exists with that name"
- validate_presence_of :name
- @membership = current_user.memberships.build(:group => @group)
- def create
- @groups = Group.current
- @group = Group.find_by_name(params[:membership][:group])
- @membership = current_user.memberships.build(:group_id => @group.id)
- validates_uniqueness_of :group_id, :message => "can be only be joined once", :scope => 'user_id'