2009-09-30 110 views
0

下面的代碼正在工作,但我想知道是否有更好的方法來完成此操作。這是正確的RESTful方式嗎?任何的意見都將會有幫助。其基本要求是,我需要一種方法來創建和銷燬從地方會員/ show.html.erblink_to創建並銷燬來自其他資源的資源

class Place < ActiveRecord::Base 
    has_many :memberships 
    has_many :members, :through => :memberships, :source => :user 

    def membership_for_user(user) 
    self.memberships.select{|m| m.user_id == user.id} 
    end 
end 

class User < ActiveRecord::Base 
    has_many :memberships 
end 

class Membership < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :place 
end 

class MembershipsController < ApplicationController 
    def create 
    @membership = Membership.new({:user_id => current_user.id, :place_id => params[:place_id]}) 
    unless @membership.save 
     flash[:notice] = "Unable to become member." 
    end 
    redirect_to place_path(params[:place_id]) 
    end 

    def destroy 
    @membership = Membership.find(params[:id]) 
    place_id = @membership.place_id 
    @membership.destroy 
    redirect_to place_path(place_id) 
    end 
end 

地方/ show.html.erb

<%= link_to 'Join', memberships_path(:place_id => @place.id), :method => :post %> 
<%= link_to 'Cancel', @place.membership_for_user(current_user), :method => :delete %> 

回答

1

這看起來很奇怪 - 怎麼能您是否在同一頁面上創建和刪除成員資格?

您是在選擇link_to語句中的一個還是其他用戶,或者用戶是否有多個成員資格到同一個地方?

我會考慮:

  • 使用的form_for(@membership),而不是第一的link_to,與hidden_​​field:place_id
  • 加載控制器中的成員資格,這將簡化第二的link_to。
0

@ klochner是對的;這是錯誤的。您需要事先創建成員資格,並在成員資格上擁有狀態屬性,如果您想這樣做,您可以更新爲「已接受」或僅刪除成員資格。否則,您需要一個表單來首先創建成員資格。