我試圖完整展示您在尋找什麼。讓我知道它是否適合你。
#FILE: models/team.rb
class Team < AR::Base
has_many :users
end
#FILE: models/user.rb
class User < AR::Base
belongs_to :team
end
#FILE: config/routes.rb
#Here you are defining "users" as a nested resource of "teams"
resources :teams do
resources :users do
member do
put :join
end
end
end
#if you run "rake routes" it will show you the following line along with others
join_team_user PUT /teams/:team_id/users/:id/join(.:format) users#join
#FILE: controllers/team_controller.rb
def show
@team = Team.find(params[:id])
@team_members = @team.users
@user = current_user.users.build if signed_in?
end
#FILE: views/teams/show.html.erb
<% if(@user) %>
<%= form_for @user, :url => join_team_user_path(@team, @user) do |f| %>
<%= f.submit "Join Team", class: "btn btn-large btn-primary" %>
<% end %>
<% end %>
#You dont really need a form for this. You can simply use `link_to` like below
<%= link_to 'Join', join_team_user_path(@team, @user), method: :put %>
#FILE: controllers/users_controller.rb
def join
# params[:id] => is the user_id
@user = User.find(params[:id])
# params[:team_id] => is the team_id
@team = Team.find(params[:team_id])
# Now make the relationship between user and team here.
@user.update_attribute(:team, @team)
end
更新:基於您的評論
問:難道我創建一個新的用戶資源和窩那還是我窩在已經建立用戶的資源?
Ans:根據您的要求,任何資源可以單獨定義或嵌套定義。但是,您可以控制哪種方法可以以哪種方式提供。就像你的情況一樣,當你的user
嵌套在team
資源下時,你只能允許使用join
方法。
resources :users, :only=>:join do
member do
put :join
end
end
resource :users
運行rake routes
與不:only=>:join
選項,並查看可用的路線不同。
問:會影響其他事情嗎?
答案:如果你嚴格按照上面的例子定義你的路由,它不應該影響其他的東西。您應該通過rake routes
確認您的應用程序的所有可用路線。
問:我應該把目前的routes.rb
文件放在那裏嗎?
回答:假設您目前的routes.rb
將以上述方式修改。我能回答這個問題嗎?
問:困惑的評論控制器?
Ans: Im extreamely對不起。是的,當rake routes
命令顯示時它必須是users_controller.rb
。從我自己的示例代碼複製和粘貼的結果:P
問:我應該在那裏放什麼?構建方法
答:在你的情況這兩個user
和team
已經存在於數據庫中。你所需要做的只是建立一種關係。所以你可以使用update_attribute
選項。我改變了連接方法。請檢查。但是,如果想要創建新條目,您可能需要構建方法。
很抱歉這麼晚纔回復:)
有什麼方法在'user_controller',需要一個TEAM_ID並加入用戶那支球隊?如果在這裏添加該功能。運行'rake:routes'來查看'form_for'實際上會指向那個方法。另外你的'form_for'應該有'team_id',否則用戶將會加入哪個團隊? – Samiron
「join_button」將出現在團隊的展示頁面上。我認爲構建方法應該在協會的「has_many」部分。這就是爲什麼我有「@user = current_user.users.build如果signed_in?」在Teams_controller中。 我基於邁克爾哈特爾的教程microposts關係。用戶has_many微博和microposts belongs_to一個用戶,在我的users_controller它說:「@micropost = current_user.microposts.build ...」 沿着這些路線,我認爲「ID」自動拾取。我沒有在micropost表單上定義user.id? –
你好,史蒂夫,沒有聽到你的任何更新......最新狀態? – Samiron