0

我有一个分类模型,它以如下方式连接到学生模型

分类.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 

我正在使用设计,所以有用户会话?我完全不知道会话是如何工作的 我希望在登录后找到该特定学生,并让该学生使用表单中的输入创建分类广告,以便正确创建记录?

问题更像是如何使用表单将数据正确插入连接的表?(而不仅仅是将数据插入到一个简单的无关系表中)

4

1 回答 1

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参数中获取学生。你的路线会是这样的:new_student_classified_path(@student).

于 2013-09-19T14:00:27.247 回答