保存并与Rails的模型和修正模型重定向 [英] Saving and redirecting with a model and revision model in Rails

查看:234
本文介绍了保存并与Rails的模型和修正模型重定向的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是比较新的回报率,并一直在一节课内的共享后端。

目前我有两个型号:教训和修订。这个想法是,一​​个老师会创建一个教训(带有标题,描述等),在课堂/新的一页。该表格​​会重定向到另一个形式在课堂/ lesson_id /修改/新页面等领域(内容,评论)。最终,老师将能够通过复制修订自己的个人资料保存和修改的经验教训,但该模型还没有。

我仍然关注两个所谓基本问题,无论是在创造新的经验教训和修订。

1)保存的教训给用户,并修订用户和教训。有一次,我不得不保存到用户的版本,但经验教训不节能。

2)从教训形式修订表格和修订版的形式修改页面重定向。我试着在控制器和的form_for块之一改变了重定向,都无济于事。新课形式还是要去/经验教训,而不是/课时/ 1 /修改/新的,而我试图重定向到具有new_lesson_revision_path。修订表单还只是追溯到/修改,这将是一个管理的索引,但我宁愿去/课/ 1 /修改/ 1等。

感谢您事先对这些问题的一方或双方的任何意见!

下面是我的code,以供参考。从routes.rb中的摘录:

 资源:经验教训
资源:修订#For索引页管理员
资源:经验教训做
  资源:修订
结束

模式

 类课程< ActiveRecord的::基地
  attr_accessible:稳定:总的来说,:标题:TIME_CREATED
  的has_many:修订:CLASS_NAME => 修订版
  的has_many:用户:通过=> :修订
结束类修订< ActiveRecord的::基地
  attr_accessible:评论,:lesson_id,:USER_ID,:描述:内容:time_updated
  belongs_to的:课:CLASS_NAME => 教训,:foreign_key => lesson_id
  belongs_to的:用户:CLASS_NAME => 用户,:foreign_key => 用户名  accepts_nested_attributes_for:教训
结束

教训
new.html.erb

 <如果user_signed_in%? %GT;
  < H2>新建的教训和LT; / H>
  <%=的form_for @lesson做| F | %GT;
  <%=渲染形式%GT;
  <%结束%GT;
  <%=的link_to'返回',lessons_path%GT;
<%其他%GT;
< H3>请<%=的link_to'注册',new_user_session_path%GT;或LT;%=的link_to创建帐户,new_user_registration_path%GT;制作和保存的教训与LT; / H3 GT&;
<%结束%GT;

教训
_form.html.erb

 <%=的form_for @lesson,:URL => new_lesson_revision_path(@lesson_id,@revision)做| F | %GT;  < D​​IV CLASS =字段>
    <%= f.label:标题%GT;< BR />
    <%= f.text_field:标题%GT;
  < / DIV>
  < D​​IV CLASS =字段>
    <%= f.label:总结%GT;< BR />
    <%= f.text_area:总结%GT;
  < / DIV>
  < D​​IV CLASS =字段>
    <%= f.label:稳定%GT;< BR />
    <%= f.check_box:稳定%GT;
  < / DIV>  < D​​IV CLASS =行动>
    &所述;%= f.submit%GT;
  < / DIV>
<%结束%GT;

修订
new.html.erb

 <如果user_signed_in%? %GT;
  < H2>新建修订和LT; / H>
  <%=的form_for @revision做| F | %GT;
    <%=渲染形式%GT;
  <%结束%GT;
  <%=的link_to'返回',lessons_path%GT;
<%其他%GT;
  < H3>请<%=的link_to'注册',new_user_session_path%GT;或LT;%=的link_to创建帐户,new_user_registration_path%GT;制作并保存修改< / H3 GT&;
<%结束%GT;

修订
_form.html.erb

 <%=的form_for(@revision)做| F | %GT;  < D​​IV CLASS =字段>
    <%= f.label:描述%GT;< BR />
    <%= f.text_field:描述%GT;
  < / DIV>
  < D​​IV CLASS =字段>
    <%= f.label:含量%GT;< BR />
    <%= f.text_area:含量%GT;
  < / DIV>
  < D​​IV CLASS =字段>
    <%= f.label:发表评论%GT;< BR />
    <%= f.text_area:评论%GT;
  < / DIV>  < D​​IV CLASS =行动>
    &所述;%= f.submit%GT;
  < / DIV>
<%结束%GT;

课程控制器:新/创建

 高清新
    @lesson = Lesson.new
  结束  打造高清
    @user = CURRENT_USER
    @lesson = Lesson.new(PARAMS [:课])
    #@user.lessons<< @课
    PARAMS [:教训] [:USER_ID] = current_user.id
    PARAMS [:教训] [:lesson_id] = @ lesson.id
    做的respond_to |格式|
      如果@ lesson.save
        format.html {redirect_to的new_lesson_revision_path(PARAMS [:lesson_id]),通知:'你的课创建成功。 }
        format.json {渲染JSON:@lesson,状态:创建,地点:new_lesson_revision_path}
      其他
        format.html {渲染动作:新}
        format.json {渲染JSON:@ lesson.errors,状态:unprocessable_entity}
      结束
    结束
  结束

修订控制器:新/创建

 高清新
    @revision = Revision.new
  结束
  打造高清
    @lesson = Lesson.find(PARAMS [:lesson_id])
    @revision = @ lesson.revisions.new(PARAMS [:修改])
    @ revision.user_id = current_user.id
    @ revision.lesson_id = @ lesson.id
    @ revision.time_updated = DateTime.now
    做的respond_to |格式|
      如果@ revision.save
       format.html {redirect_to的current_user.profile}
       format.json {}
      其他
      渲染:新
      结束
    结束
  结束

最后这里有大多数的结果从我耙路线:

  home_index GET /home/index(.:format)回家#指数
             资料发表/profile(.:format)型材#创建
         new_profile GET /profile/new(.:format)型材#新
        edit_profile GET /profile/edit(.:format)型材#编辑
                     GET /profile(.:format)型材#秀
                     PUT /profile(.:format)型材#更新
                     DELETE /profile(.:format)型材#销毁
             教训GET /lessons(.:format)的教训#指数
                     POST /lessons(.:format)的教训#创建
          new_lesson GET /lessons/new(.:format)的教训#新
         edit_lesson GET /lessons/:id/edit(.:format)的教训#编辑
              教训中获得/lessons/:id(.:format)的教训#秀
                     PUT /lessons/:id(.:format)的教训#更新
                     DELETE /lessons/:id(.:format)的教训#销毁
    lesson_revisions GET /lessons/:lesson_id/revisions(.:format)修订#指数
                     POST /lessons/:lesson_id/revisions(.:format)修订#创建
 new_lesson_revision GET /lessons/:lesson_id/revisions/new(.:format)修订#新
edit_lesson_revision GET /lessons/:lesson_id/revisions/:id/edit(.:format)修订编辑#
     lesson_revision GET /lessons/:lesson_id/revisions/:id(.:format)修订#秀
                     PUT /lessons/:lesson_id/revisions/:id(.:format)的版本更新#
                     DELETE /lessons/:lesson_id/revisions/:id(.:format)修订#销毁
                     GET /lessons(.:format)的教训#指数
                     POST /lessons(.:format)的教训#创建
                     GET /lessons/new(.:format)的教训#新
                     GET /lessons/:id/edit(.:format)的教训#编辑
                     GET /lessons/:id(.:format)的教训#秀
                     PUT /lessons/:id(.:format)的教训#更新
                     DELETE /lessons/:id(.:format)的教训#销毁
                根/家居#指数
                            /profile(.:format)型材#秀


解决方案

你的问题:1)保存的教训给用户,并修订用户和教训。有一次,我不得不保存到用户的版本,但经验教训不节能。

看到你的 lessons_form

<%=的form_for @lesson,:URL => new_lesson_revision_path(@lesson_id,@revision)做| F | %GT;

您正在使用 new_lesson_revision_path 操作的形式,这不是节约了 @lesson ,修改你的 lessons_form 来:

<%=的form_for @lesson做| F | %GT;

lessons_controller.rb 如下:

 高清新
    @lesson = Lesson.new
  结束  打造高清
    @user = CURRENT_USER
    @lesson = Lesson.new(PARAMS [:课])
    ....
    @ lesson.save
    #看看,redirect_to的使用参数新课[lesson_id]
    redirect_to的new_lesson_revision_path(PARAMS [:lesson_id])
 结束

revisions_controller.rb 如下:

 高清新
    @revision = Revision.new
    #得到@lesson使用参数(:lesson_id)
    @lesson = Lesson.find(PARAMS [:lesson_id])
  结束
  打造高清
   @revision = @ revision.new(PARAMS [:修改])
   @ revision.user_id = current_user.id
   @ revision.time_updated = DateTime.now
     做的respond_to |格式|
       如果@ revision.save
         format.html {redirect_to的current_user.profile}
         format.json {}
       其他
        渲染:新
        结束
      结束
  结束

和您的 revisions_form ,你可以添加 lesson_id hidden_​​field

 <%=的form_for(@revision)做| F | %GT;
  <%= f.hidden_​​field:lesson_id,:价值=> @ lesson.id%GT;
  ..
  ..
<%结束%GT;

2号

为什么不使用嵌套形式或多步的形式?


  • 如果你是使用嵌套形式,可以使lessons_form和
    revisons_form在一种形式

    看到截屏部分
    1

    第2部分
    嵌套表格


  • 如果您使用的是多级的形式,可以解决你的问题 2号

    看到截屏向导形式


Addtional

错误:未定义的方法'修订'的零:NilClass - 从线@revision = @ lesson.revisions.new(PARAMS [:修改])

由于 @revision 是单机上的情况下,可以改变这种

@revision = @ lesson.revisions.new(PARAMS [:修改])

@revision = @ revision.new(PARAMS [:修改])

I'm relatively new to RoR, and have been working on a lesson-site sharing back-end.

Currently I have two models: Lesson and Revision. The idea is that a teacher would create a lesson (with a title, description, etc.), at the lesson/new page. The form would redirect to another form with other fields (content, comments) at the lesson/lesson_id/revision/new page. Eventually teachers will be able to "save and modify" lessons by copying revisions to their own profile, but the model isn't there yet.

I'm still focusing on two supposedly basic issues, both in creating new lessons and revisions.

1) Saving the lessons to a user, and revisions to a user and lesson. At one point I had revisions saved to users, but lessons were not saving.

2) Redirecting from the lesson form to the revision form, and the revision form to the revision page. I've tried changing the redirects in the controller and one of the form_for blocks, to no avail. The new lesson form still wants to go to /lessons rather than /lesson/1/revision/new, which I've tried to redirect to with new_lesson_revision_path. The revision form also just goes back to /revisions, which will be an admin index but I'd rather go to /lesson/1/revision/1 etc.

Thanks in advance for any advice on either or both of these issues!

Below is my code for reference. An excerpt from routes.rb:

resources :lessons
resources :revisions #For index pages for admin
resources :lessons do
  resources :revisions
end

Models

class Lesson < ActiveRecord::Base
  attr_accessible :stable, :summary, :title, :time_created
  has_many :revisions, :class_name => "Revision"
  has_many :users, :through => :revisions
end

class Revision < ActiveRecord::Base
  attr_accessible :comment, :lesson_id, :user_id, :description, :content, :time_updated
  belongs_to :lesson, :class_name => "Lesson", :foreign_key => "lesson_id"
  belongs_to :user, :class_name => "User", :foreign_key => "user_id"

  accepts_nested_attributes_for :lesson
end

Lessons new.html.erb

<% if user_signed_in? %>
  <h2>New lesson</h2>
  <%= form_for @lesson do |f| %>
  <%= render "form" %>
  <% end %>
  <%= link_to 'Back', lessons_path %>
<% else %>
<h3> Please <%= link_to 'sign in', new_user_session_path %> or <%= link_to 'create an account', new_user_registration_path %> to make and save lessons.</h3>
<% end %>

Lessons _form.html.erb

<%= form_for @lesson, :url => new_lesson_revision_path(@lesson_id, @revision) do |f| %>

  <div class="field">
    <%= f.label :title %><br />
    <%= f.text_field :title %>
  </div>
  <div class="field">
    <%= f.label :summary %><br />
    <%= f.text_area :summary %>
  </div>
  <div class="field">
    <%= f.label :stable %><br />
    <%= f.check_box :stable %>
  </div>

  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

Revisions new.html.erb

<% if user_signed_in? %>
  <h2>New revision</h2>
  <%= form_for @revision do |f| %>
    <%= render "form" %>
  <% end %>
  <%= link_to 'Back', lessons_path %>
<% else %>
  <h3> Please <%= link_to 'sign in', new_user_session_path %> or <%= link_to 'create an account', new_user_registration_path %> to make and save revisions.</h3>
<% end %>

Revisions _form.html.erb

<%= form_for(@revision) do |f| %>

  <div class="field">
    <%= f.label :description %><br />
    <%= f.text_field :description %>
  </div>
  <div class="field">
    <%= f.label :content %><br />
    <%= f.text_area :content %>
  </div>
  <div class="field">
    <%= f.label :comment %><br />
    <%= f.text_area :comment %>
  </div>

  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

Lesson Controller: new/create

  def new
    @lesson = Lesson.new
  end

  def create
    @user = current_user
    @lesson = Lesson.new(params[:lesson])
    #@user.lessons << @lesson
    params[:lesson][:user_id] = current_user.id
    params[:lesson][:lesson_id] = @lesson.id
    respond_to do |format|
      if @lesson.save
        format.html { redirect_to new_lesson_revision_path(params[:lesson_id]), notice: 'Your lesson was successfully created.' }
        format.json { render json: @lesson, status: :created, location: new_lesson_revision_path}
      else
        format.html { render action: "new" }
        format.json { render json: @lesson.errors, status: :unprocessable_entity }
      end
    end
  end

Revisions Controller: new/create

  def new
    @revision = Revision.new
  end
  def create
    @lesson = Lesson.find(params[:lesson_id])
    @revision = @lesson.revisions.new(params[:revision])
    @revision.user_id = current_user.id
    @revision.lesson_id = @lesson.id
    @revision.time_updated = DateTime.now
    respond_to do |format|
      if @revision.save
       format.html { redirect_to current_user.profile }
       format.json { }
      else
      render :new
      end
    end
  end

Lastly here are most of the results from my rake routes:

          home_index GET    /home/index(.:format)                            home#index
             profile POST   /profile(.:format)                               profiles#create
         new_profile GET    /profile/new(.:format)                           profiles#new
        edit_profile GET    /profile/edit(.:format)                          profiles#edit
                     GET    /profile(.:format)                               profiles#show
                     PUT    /profile(.:format)                               profiles#update
                     DELETE /profile(.:format)                               profiles#destroy
             lessons GET    /lessons(.:format)                               lessons#index
                     POST   /lessons(.:format)                               lessons#create
          new_lesson GET    /lessons/new(.:format)                           lessons#new
         edit_lesson GET    /lessons/:id/edit(.:format)                      lessons#edit
              lesson GET    /lessons/:id(.:format)                           lessons#show
                     PUT    /lessons/:id(.:format)                           lessons#update
                     DELETE /lessons/:id(.:format)                           lessons#destroy
    lesson_revisions GET    /lessons/:lesson_id/revisions(.:format)          revisions#index
                     POST   /lessons/:lesson_id/revisions(.:format)          revisions#create
 new_lesson_revision GET    /lessons/:lesson_id/revisions/new(.:format)      revisions#new
edit_lesson_revision GET    /lessons/:lesson_id/revisions/:id/edit(.:format) revisions#edit
     lesson_revision GET    /lessons/:lesson_id/revisions/:id(.:format)      revisions#show
                     PUT    /lessons/:lesson_id/revisions/:id(.:format)      revisions#update
                     DELETE /lessons/:lesson_id/revisions/:id(.:format)      revisions#destroy
                     GET    /lessons(.:format)                               lessons#index
                     POST   /lessons(.:format)                               lessons#create
                     GET    /lessons/new(.:format)                           lessons#new
                     GET    /lessons/:id/edit(.:format)                      lessons#edit
                     GET    /lessons/:id(.:format)                           lessons#show
                     PUT    /lessons/:id(.:format)                           lessons#update
                     DELETE /lessons/:id(.:format)                           lessons#destroy
                root        /                                                home#index
                            /profile(.:format)                               profiles#show

解决方案

Your question : 1) Saving the lessons to a user, and revisions to a user and lesson. At one point I had revisions saved to users, but lessons were not saving.

see on your lessons_form

<%= form_for @lesson, :url => new_lesson_revision_path(@lesson_id, @revision) do |f| %>

You are using new_lesson_revision_path action form, this is not saving a @lesson, change your lessons_form to :

<%= form_for @lesson do |f| %>

and lessons_controller.rb looks like :

  def new
    @lesson = Lesson.new
  end

  def create
    @user = current_user
    @lesson = Lesson.new(params[:lesson]) 
    ....
    @lesson.save
    # see, redirect_to new lesson with params[lesson_id]
    redirect_to new_lesson_revision_path(params[:lesson_id])
 end

and on revisions_controller.rb looks like :

  def new
    @revision = Revision.new
    # get @lesson with params(:lesson_id)
    @lesson = Lesson.find(params[:lesson_id])
  end
  def create
   @revision = @revision.new(params[:revision])
   @revision.user_id = current_user.id
   @revision.time_updated = DateTime.now
     respond_to do |format|
       if @revision.save
         format.html { redirect_to current_user.profile }
         format.json { }
       else
        render :new
        end
      end
  end

and on your revisions_form, you can add lesson_id with hidden_field

<%= form_for(@revision) do |f| %>
  <%= f.hidden_field :lesson_id, :value => @lesson.id %>
  ..
  ..
<% end %>

no 2

Why should you not use nested form or multistep form?

  • If you are use nested form, you can make lessons_form and revisons_form in one form.

    see screencasts part 1 and part 2 for nested form

  • If you are using multistep form, you can resolved you problem no 2

    see screencasts Wizard Forms

Addtional

error: undefined method 'revisions' for nil:NilClass - from the line @revision = @lesson.revisions.new(params[:revision])

Because @revision is stand-alone on your case, you could change this

@revision = @lesson.revisions.new(params[:revision])

to

@revision = @revision.new(params[:revision])

这篇关于保存并与Rails的模型和修正模型重定向的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆