我正在建立一个包含用户,学校和学校组模型的社交网站。用户通过has_many到学校组加入,并在学校中担任不同的角色。我在编写在线form_for按钮时遇到问题,用户可以点击该按钮申请学校。我需要包含在学校组对象创建中的参数是user_id,school_id和角色'申请人'。我知道我可以使用current_user.schoolgroups.build让表单初始化一个创建操作并包含正确的user_id,但我遇到的问题是如何编写一个表单,将school_id发送到控制器以创建新的schoolgroup对象。我的代码中的@school实例变量只是占位符,无论正确的代码应该是什么
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 %>
答案 0 :(得分: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" %>
这更简单,更多在Rails精神中。