使用ruby on rails单击按钮时更新数据库

时间:2015-04-21 03:35:06

标签: ruby-on-rails updatemodel

我是使用Ruby On Rails的新手,所以这个问题可能看起来很愚蠢。我一直在寻找很多教程,并且有点理解我能做什么,但代码到底是什么样的?我应该如何实现这个以及把它们放在哪里仍然让我感到困惑。

我有一个名为note的数据库,它有两个属性:note类型为text的注释和名为user_name的外键,其类型为string。在main.html.erb中,我有我的主页面和一个记事本,它是一个文本区域。这是主要的一部分

    <div class="four columns" id="note">
      <textarea id="area" style="width:250px; height:300px;" placeholder="Your notes starts here"><%= @note %></textarea>
      <div id="clear" class="primary btn pretty"><a href="#">Clear</a></div>
      <div class="secondary btn pretty"><%= link_to 'Save', controller: 'main', action: 'update_note', :remote => true, :method => :put %></div>
    </div>

顺便说一下,我正在使用Gumby。所以我的按钮叫做“保存”。我希望用户在txtfiled中输入他们的注释,当他们点击“保存”按钮时,它将根据user_name更新行中的注释数据库。 所以我的问题是,我应该在main_controller或notes_controller上编写一个动作。我该怎么办样本可能会有所帮助,因为我尝试了不同的方式,这真的令人沮丧。 我尝试将代码放在main_controller中,如下所示:

    def update_note
@note = Note.find_by(user_name: session[:user_name])

respond_to do |format|
  if@note.update_attributes(params[:note])
    format.html { redirect_to @note, :notice => 'Note was successfully updated.' }
    format.js
  else
    format.html { render :action => "edit" }
    format.js
  end
end
end

以及尝试将代码放入notes_controller中。但我得到“没有路线匹配”

我完全搞砸了。它明天到期!谢谢你的帮助。很高兴向我推荐一些教程链接,但与我的代码相关的任何内容都会更有帮助!

谢谢!

1 个答案:

答案 0 :(得分:3)

您必须使用表单,或者您也可以使用Jquery Ajax。 首先将 jquery-rails '添加到 Gemfile ,然后进行捆绑安装。

Gemfile 中的

gem 'jquery-rails'

接下来需要 jquery jquery_ujs 进入 /app/assets/javascripts/application.js 清单,如下所示:

//= require jquery
//= require jquery-ujs
/views/layouts/application.html.erb 中的

<%=javascript_include_tag "application.js"%>
#I guess it will be already there
/views/main/home.html.erb

中的

<%= form_tag({:controller=>'main',:action=>'update_note'},:method=>:post,:id=>"update_note",:name=>'note_form',:remote=>true) do %>

    <div class="four columns" id="note">
      <textarea id="area" name="note" style="width:250px; height:300px;" placeholder="Your notes starts here"><%= @note %></textarea>
      <div id="clear" class="primary btn pretty"><a href="#">Clear</a></div>
      <div class="secondary btn pretty"><%= submit_tag 'Save' %></div>
    </div>

<%end%>
<div id="updated">

</div>
main_controller.rb

中的

def update_note

@note = Note.find_by(user_name: session[:user_name])

  if @note.update_attributes(params[:note])
    @updated = "true"
    format.js
  else
    @updated = "false"
    format.js #this will load update_note.js.erb
  end

end 

在../ views / main /

下创建一个文件update_note.js.erb

现在位于 app / views / main / update_note.js.erb

<%if @updated == "true"%>
          $('#updated').html("Your post has been successfully updated").show();
<%elsif @updated == "false"%>
          $('#updated').html("Your post could not be updated").show();
 <%end%>

最后在 /config/routes.rb 中添加:

    #in Rails 3
    #match "main/update_note" => "main#update_note" 

    #in Rails 4
    match 'main/update_note' => 'main#update_note', :via => [:post]

打开此主页,其中包含update_note文本框,在Chrome / Firefox中打开控制台。现在在控制台(在Firefox中)的网络标签网络标签(在Chrome中)进行检查,并检查点击保存时发出的请求按钮。如果您发现任何困难,请告诉我。