首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在@subject = Subject.find(params[:subject_id])中找不到没有ID的主题

在@subject = Subject.find(params[:subject_id])中找不到没有ID的主题
EN

Stack Overflow用户
提问于 2014-04-15 04:49:47
回答 2查看 667关注 0票数 0

我有一个错误:在@subject = Subject.find(params:subject_id)中找不到没有ID的Subject

我建立了多到多的联系。有三种模式:教师模式、学科模式和订阅模式。订阅模型包括以下字段: teacher_id和subject_id。

代码语言:javascript
复制
class Subject < ActiveRecord::Base
  has_many :subscriptions
  has_many :teacher, :through => :subscriptions
end

class Teacher < ActiveRecord::Base
  has_many :subscriptions
  has_many :subjects, :through => :subscriptions
end

class Subscription < ActiveRecord::Base
  belongs_to :subject
  belongs_to :teacher
end

teacher_controller

代码语言:javascript
复制
def create
        @subject = Subject.find(params[:subject_id])
                @teacher = Teacher.new(teacher_params)
                respond_to do |format|
                  @teacher.subjects << @subject
                  if @teacher.save
        format.html { redirect_to @teacher, notice: 'Teacher was successfully created.' 
        format.json { render action: 'show', status: :created, location: @teacher }
      else
        format.html { render action: 'new' }
        format.json { render json: @teacher.errors, status: :unprocessable_entity }

      end

    end

    end

_form.html.erb

代码语言:javascript
复制
  <%= form_for(@teacher,:html => { class: 'login-form' })  do |f| %>

    <%= f.fields_for :subject do |n| %>
                <%= n.select(@subject, @subjects.map{|p| [p.name, p.id]}) %>
                <% end %>
    ...
<% form %>


resources :teachers do
    resources :subjects
end
EN

回答 2

Stack Overflow用户

发布于 2014-04-15 04:53:17

代之而行

代码语言:javascript
复制
def create
  @subject = Subject.where("id =?", params[:subject_id]).first
  unless @subject.blank?
    @teacher = Teacher.new(teacher_params)
    ......
    ......
  else
    # set flash message and redirect
  end
end
票数 1
EN

Stack Overflow用户

发布于 2014-04-15 04:57:27

在视图_form.html.erb中,替换select_tag

代码语言:javascript
复制
<%= select_tag "subject_id", options_from_collection_for_select(@subjects, "id", "name") %>

在控制器代码中,

代码语言:javascript
复制
def create
  @subject = Subject.where(id: params[:subject_id]).first

  if @subject.present?
    #YOUR CODE GOES HERE.
  else
    render 'new' # OR render to the action where your teacher form resides
  end
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23074891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档