编辑和更新问题

时间:2015-05-06 06:31:42

标签: ruby-on-rails

New和Create工作正常,数据存储在数据库中,但编辑和更新存在问题。

这是我的圣人控制器sages_controller.rb

class SagesController < ApplicationController
  def home
  end

  def about
  end

  def new
    @sage = Sage.new
  end

  def create
    @sage= Sage.new(sage_params)
    if @sage.save
      flash[:success] = 'Thanks for Joining'
      redirect_to '/thanks'

    else
      flash[:notice] = 'Please fill the form Correctly'
      render 'new'
    end
  end

  def edit
    @sage=Sage.find(params[:id])
  end

  def update
    @sage = Sage.find(params[:sage])
    if @sage.update_attributes(sage_params)
      redirect_to '/thankss'
    else
      render 'new'
    end

  end


  def resources

  end

  private
  def sage_params
    params.require(:sage).permit(:Name, :Email, :Address, :Number)
  end



end

这是我对新方法new.html.erb

的看法
<div class="contact" style="padding: 50px; color: orange ">

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

      <div class="form-group" >
        <h3><%= f.label :Name%></h3>
        <%= f.text_field :Name %>
        <br/>
      </div>
      <div class="form-group" >
        <h3><%= f.label :Email%></h3>
        <%= f.email_field :Email %>

      </div>
      <div class="form-group" >
        <h3><%= f.label :Address%></h3>
        <%= f.text_field :Address %>
        <br/>
      </div>
      <div class="form-group" >
        <h3> <%= f.label :Number%></h3>
        <%= f.number_field :Number %>
        <br/>
      </div>
      <br/>
      <br/>
      <div class="submit" >
        <h2><%= f.submit 'SUBMIT'%></h2>
      </div>


  <% end %>
  <%= link_to 'Edit', 'edit' %>
</div>

`

这是我对编辑方法edit.html.erb

的看法
<%= form_for @sage do |f| %>
    <%= f.label :Name %>
    <%= f.text_field :Name %>
    <br/>
    <%= f.label :Email %>
    <%= f.text_field :Email %>
    <br/>
    <%= f.label :Address %>
    <%= f.text_field :Address %>
    <br/>
    <%= f.label :Number %>
    <%= f.text_field :Number %>
    <br/>
<%= f.submit 'Update' %>
<% end %>

`
这是我在routes.rb中的路线

 resources :sages,only: [:new,:create,:edit, :update]
  get 'sages/home'=>'sages#home'
  get 'sages/about'=>'sages#about'
  get 'sages/resources'=>'sages#resources' `   

6 个答案:

答案 0 :(得分:2)

你做错了,如果记录不存在,你如何编辑呢?在new.html.erb中,您添加了一个链接

<%= link_to 'Edit', 'edit' %>

删除该行,错误。您只能编辑现有记录而不能编辑新记录。此外,路线是错误的。它应该看起来像

<%= link_to 'Edit', edit_sage_path(@sage) %>

希望这有帮助!

答案 1 :(得分:1)

您使用的是哪个网址或路径?我想你使用的URL或路径不正确。

根据您提到的路线,您应该拥有以下访问路线进行编辑:

edit_sage GET    /sages/:id/edit(.:format)             sages#edit

因此,您使用edit_sage(id)或使用/sages/id/edit输入网址。请注意,您必须使用有效的id圣人替换id(在路径或网址中)。

在新视图中,您无法编辑不存在的对象(即未在数据库中保留)。

<%= link_to 'Edit', 'edit' %>

是其他用户提到的错误。

另外,如果您想要调用编辑,请考虑我在开头提到的内容。确保您传递了有效存在于数据库中的idsage object

答案 2 :(得分:1)

首先需要更改编辑链接,它应该是:

<%= link_to 'Edit', edit_sage_path(@sage) %>

您可以在新模板中调用编辑链接,因为在这种情况下,您的@sage为空(刚刚启动),您可以通过添加&#39;编辑&#39;来编辑您的圣人。链接到索引或显示模板

答案 3 :(得分:0)

update动作更改

def update
  @sage = Sage.find(params[:id])
  if @sage.update_attributes(sage_params)
    redirect to ('/thanks')
  else
    render 'new'
  end
end

答案 4 :(得分:0)

如果你有$rootScope.$on('handleCreatedUser', function(event, args) { alert('CreateUserResponseController : ' + args.message); }); 的记录,那就像一个例子,然后写一下像id = 2这样的网址,你会得到记录为/sages/2/edit的数据。 在下面执行此操作也会更改您的更新方法,

id=2

答案 5 :(得分:0)

我给出的链接在new.html.erb中编辑错误,将其删除 并将编辑路线更改为:

get 'sages/id/edit'=>'sages#edit' in routes.rb and now it works fine....