我有一个应用程序,用户可以创建课程,每个课程的has_one教学大纲。我如何配置我的课程和教学大纲(我知道它是教学大纲,但显然Rails不是)控制器和我的路线,所以在课程的页面上有一个创建或显示课程教学大纲的链接,以及一个从显示教学大纲页面返回到课程的链接?
在我的路线中,我有:
resources :courses do
resources :syllabuses
member do
put :enroll #this is so users can enroll in the course
end
end目前,course_id将保存在我的courses_controller的教学提纲表中,我有:
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然后在我的课程展示页面中,我有:
<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表单(在我的课程视图文件夹中)中,我尝试从以下内容开始:
# 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| %>我得到了一个未定义的方法错误。
发布于 2012-06-22 21:32:19
如果您想在特定syllabus的show操作中创建一个新的course,您可以将其添加到您的控制器和视图中:
courses_controller.rb
@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
endviews/courses/show.html.erb
# 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
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
endcourse.rb
class Course < ActiveRecord::Base
attr_accessible :name
has_one :syllabus
endsyllabus.rb
class Syllabus < ActiveRecord::Base
belongs_to :course
attr_accessible :name, :course_id
end我遗漏了一些东西,但你仍然应该包括:
如果有东西将东西输出到partials
if @course.syllabus.name
if/else if/elsepartials
https://stackoverflow.com/questions/11152513
复制相似问题