首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的rails应用程序中的控制器和路由问题

我的rails应用程序中的控制器和路由问题
EN

Stack Overflow用户
提问于 2012-06-22 16:16:01
回答 1查看 77关注 0票数 0

我有一个应用程序,用户可以创建课程,每个课程的has_one教学大纲。我如何配置我的课程和教学大纲(我知道它是教学大纲,但显然Rails不是)控制器和我的路线,所以在课程的页面上有一个创建或显示课程教学大纲的链接,以及一个从显示教学大纲页面返回到课程的链接?

在我的路线中,我有:

代码语言:javascript
复制
 resources :courses do
   resources :syllabuses
   member do
  put :enroll #this is so users can enroll in the course
 end
end

目前,course_id将保存在我的courses_controller的教学提纲表中,我有:

代码语言:javascript
复制
def create_syllabus
   @course = Course.find(params[:id])
   @syllabus = @course.build_syllabus(params[:syllabus])
  if @syllabus.save
   redirect_to @syllabus, notice: "Successfully created syllabus."
  else
   render :new
  end
end

然后在我的课程展示页面中,我有:

代码语言:javascript
复制
 <section>
  <% if (current_user.courses.includes(@course) || 
   current_user.coursegroups.find_by_course_id_and_role(@course.id, "admin")) %>
   <%= render 'create_syllabus' %>
   <% end %>
  </section>

然后,在我的create_syllabus表单(在我的课程视图文件夹中)中,我尝试从以下内容开始:

代码语言:javascript
复制
    # I have @course = Course.find(params[:id]) defined in show in the 
                                                    #courses_controller 
   <%= form_for @course.create_syllabus do |f| %>
   <%= form_for @course.syllabus.create_syllabus do |f| %>
   <%= form_for @course.syllabus.create do |f| %>

我得到了一个未定义的方法错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-22 21:32:19

如果您想在特定syllabusshow操作中创建一个新的course,您可以将其添加到您的控制器和视图中:

courses_controller.rb

代码语言:javascript
复制
@course = Course.find(params[:id])

# Build a new @syllabus object, only if there is none for the current course
unless @course.syllabus
  @syllabus = @course.build_syllabus
end

views/courses/show.html.erb

代码语言:javascript
复制
# Show the syllabus name if there is one, or show the form to create a new one

<% if @course.syllabus.name %>
  <p>Syllabus: <%= @course.syllabus.name %></p>
<% else %>
  <p>Create Syllabus:</p>
  <%= form_for([@course, @syllabus]) do |f| %>
    <div class="field">
      <%= f.label :name %><br />
      <%= f.text_field :name %>
    </div>
    <div class="actions">
      <%= f.submit %>
    </div>
  <% end %>
<% end %>

syllabuses_controller.rb

代码语言:javascript
复制
def create
  @course = Course.find(params[:course_id])

  # Build new syllabus object based on form input
  @syllabus = @course.build_syllabus(params[:syllabus])

  if @syllabus.save
    # redirect to /course/:id
    redirect_to @course, notice: 'Syllabus was successfully created.' }
  end
end

course.rb

代码语言:javascript
复制
class Course < ActiveRecord::Base
  attr_accessible :name
  has_one :syllabus
end

syllabus.rb

代码语言:javascript
复制
class Syllabus < ActiveRecord::Base
  belongs_to :course
  attr_accessible :name, :course_id
end

我遗漏了一些东西,但你仍然应该包括:

如果有东西将东西输出到partials

  • fixing坏代码中,比如if @course.syllabus.name

  • pull out if/else if/elsepartials

  • fixing a helper

  • …,那么就会出现这种形式
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11152513

复制
相关文章

相似问题

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