我是使用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中。但我得到“没有路线匹配”
我完全搞砸了。它明天到期!谢谢你的帮助。很高兴向我推荐一些教程链接,但与我的代码相关的任何内容都会更有帮助!
谢谢!
答案 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中)进行检查,并检查点击保存时发出的请求强>按钮。如果您发现任何困难,请告诉我。