我有一个分类模型,它以一种看起来像这样的方式与学生模型相连接
classified.rb
belongs_to :student
在我的学生模型中
has_many :classifieds
分类广告表包含a column for student_id
当我前往rails控制台时
我可以通过
为该特定学生记录创建新的分类Student.find(19).classifieds.create(:ad_title => "blah", :ad_content => "blah", :location => "blah")
记录会自动生成student_id,因为它是在学生的立场创建的。
现在问题是我有一个分类控制器,在视图中有一个新的创建方法和一个新表单
我在分类广告的立场创建了一个新广告,这里是表格
<div>
新广告: <br><br>
<%= simple_form_for @advertisement do |f| %>
<%= f.input :ad_title, label: "Title" %><br>
<%= f.input :ad_content, label: "Content"%><br>
<%= f.input :location, label: "Location"%><br>
<%= f.input :student_id, label: "Your Student ID"%><br>
<%= f.button :submit, "Add an Advertisement" %>
<% end %>
</div>
问题是student_id必须存在才能使该特定记录显示在索引中,而我的用户不知道他们的ID。
如何使用表单
在学生的立场创建分类我考虑去我的学生控制器并添加这样的方法
def create_classified_ad
@student = Student.find(params[:id])
@classified = @student.classified.create(params[:classified])
end
我正在使用设备,所以有用户会话?我不知道会话是如何工作的我希望在登录后找到该特定学生并让该学生使用表单中的输入创建分类广告,以便正确创建记录?
问题更像是如何使用表单将数据正确插入到连接表中? (而不仅仅是将数据插入一个简单的无关系表中)
答案 0 :(得分:2)
您不应该从表单中传递student_id
。如果您有设计会话,则应该可以访问current_user
:
def new
@classified = current_user.classifieds.build
end
def create
@classified = current_user.classifieds.build(params[:classified])
if @classified.save
# do something
else
# handle failure
end
end
在索引中,您可以这样做:
def index
@classifieds = current_user.classifieds.all
end
所有这些都假定你有一个设计会议。如果没有,只需像这样取得学生:
@student = Student.find(params[:student_id])
@classified = @student.classifieds.build
在用户下为分类广告设置嵌套路线:
resources :users do
resources :classifieds
end
这允许您从student_id
param中获取学生。您的路线是这样的:new_student_classified_path(@student)
。