2012-02-08 58 views
0

嘗試根據用戶輸入到成員資格表中的名稱(new.html.erb)爲用戶創建成員資格時出現問題。正確創建用戶和組之間的聯接操作

user.rb

has_many :memberships, :dependent => :destroy 
    has_many :groups, :through => :memberships 

membership.rb

class Membership < ActiveRecord::Base 
    attr_accessible :user_id, :group_id 
    belongs_to :user 
    belongs_to :group 
end 

group.rb

has_many :memberships, :dependent => :destroy 
    has_many :users, :through => :memberships 

成員控制器

def create 
     @group = Group.find_by_name(:group) 
     @membership = current_user.memberships.build(:group_id => @group.group_id) 
     if @membership.save 
     flash[:notice] = "You have joined this group." 
     redirect_to :back 
     else 
     flash[:error] = "Unable to join." 
     redirect_to :back 
     end 
    end 

成員 - _form.html.erb

<%= form_for(@membership) do |f| %> 
    ... 
    #error validation 
    ... 

    <div class="field"> 
    <%= f.label :group %><br /> 
    <%= f.text_field :group %> 
    </div> 

    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

我希望它做的是找到組輸入,如果它存在,並建立在成員表項表格。只是不知道我在做什麼是正確的。有什麼建議麼?

+0

有什麼問題你的代碼?日誌中是否有錯誤? – Brandan 2012-02-08 04:27:39

+0

它沒有從組表找到group_id。給我一個錯誤「未定義的方法'group_id'爲零:NilClass」。我不知道這是一個問題,或者在控制器 – Norto23 2012-02-08 04:46:25

回答

1

你的代碼是不是現在的工作的原因是因爲該行的:

@group = Group.find_by_name(:group) 

它應該是這樣的(我不記得確切對不起)

@group = Group.find_by_name(params[:membership][:group]) 

的錯誤是因爲@groupnil而被叫到下一行。

但是,您應該可以在模型中處理該類型的邏輯,無論如何都要使用虛擬屬性或其他東西。

membership.rb

def group_name 
    if self.group 
    @group_name ||= self.group.name 
    end 
end 

def group_name=(group_name) 
    @group_name = group_name 

    self.group = Group.find_by_name(@group_name) 
end 

形式

<div class="field"> 
    <%= f.label :group_name, "Group" %><br /> 
    <%= f.text_field :group_name %> 
</div> 

控制器

def create 
    @membership = current_user.memberships.build(params[:membership]) 
    if @membership.save 
    flash[:notice] = "You have joined this group." 
    redirect_to :back 
    else 
    flash[:error] = "Unable to join." 
    redirect_to :back 
    end 
end 
+0

優秀,單行@group = Group.find_by_name(params [:membership] [:group]) 正是我一直在尋找的感謝 – Norto23 2012-02-08 06:47:29

相關問題