2012-06-16 113 views
0

我正在构建一个包含用户,学校和学校组模型的社交网站。用户通过学校小组通过has_many加入并在学校中扮演不同的角色。我无法编写在线form_for按钮,用户可以点击该按钮向学校申请。我需要包含在创建学校组对象中的参数是user_id,school_id和角色“申请者”。我知道我可以使用current_user.schoolgroups.build让表单初始化一个创建操作并包含正确的user_id,但是我遇到的问题是如何编写一个表单,它将school_id发送到控制器以创建新的学校组对象。在我的代码@school实例变量仅仅是占位符,任何正确的代码应该是Ruby on rails将用户添加到组

def create 
    @school = School.find(params[:schoolgroups][:school_id) 
    current_user.schoolgroups.build(school_id: @school.id, user_id: current_user.id, role: 'applicant') 
    respond_with school_path 
end 

<%= form_for(current_user.schoolgroups.build(params[school_id: @school.id]), 
                 remote: true) do |f| %> 
    <div><%= f.hidden_field :school_id %></div> 
    <%= f.submit "Apply", class: "btn btn-large btn-primary" %> 
    <% end %> 

回答

1

我会去这样

# in routes 
resources :schools do 
    member do 
    put :apply 
    end 
end 

# in schools_controller.rb 
def apply 
    @school = School.find(params[:id]) 
    @schoolgroup = current_user.schoolgroups.create(school: @school, role: 'applicant') 
    respond_with @schoolgroup 
end 

#in your view 
<%= link_to "Apply", apply_school_path(@the_school_var_you_define_somewhere), remote: true, method: :put, 
    class: "btn btn-large btn-primary" %> 

这是simplier,多在Rails的精神。

相关问题