我没有错误但是当我点击“确定”(提交按钮)没有任何反应时,我的数据库根本没有变化, 我正在做我的应用程序,如我按下一个按钮,然后所有进一步的页面已经加载,我使用ajax和jquery在它们之间导航,并在我的其中一个页面中调用我的表单。可能是因为那个?当我点击“确定”(提交按钮)时,它真的没有在控制台上做出反应:S
我的表格部分: _impediments_risks.html.erb
<div class="item-list">
<%@solution = Solution.new(params[:solution])%>
<% for i in (0..session[:project_impediments].size-1) %>
<div class="item">
<% impediment = session[:project_impediments][i][1] %>
<div class="title">
<span class="indicator"><%= impediment.priority.name %></span>
<div class="description"><%= impediment.subject %></div>
</div>
<div class="content">
<span class="title"><%= I18n.t 'text.solution' %></span>
<ul>
<% sol = ApplicationHelper.apply_filter(ApplicationHelper.Hash_DB(Solution.where('user_id IS NULL or user_id=?',session[:user])), ApplicationHelper.stem_phrase(impediment.subject.downcase)) %>
<% sol.each do |s| %>
<li><%= s %></li>
<% end %>
<li><b>NEW SOLUTION</b></li>
<li>
<%= form_for(@solution) do |f| %>
<%= render 'shared/error_messages' %>
<%= f.label :text %>
<%= f.text_field :text %>
<%= f.label :keywords %>
<%= f.text_field :keywords %>
<%= f.submit "Ok", class: "btn btn-large btn-primary" %>
<% end %>
</li>
</ul>
</div>
</div>
<% end %>
</div>
我的控制器 solutions_controller.rb
class SolutionsController < ApplicationController
def new
@solution = Solution.new
end
def create
@solution = Solution.new(solution_params)
if @solution.save
#flash.now[:success] = "New Solution created!"
else
#Something
end
end
private
def solution_params
params.require(:solution).permit(:text, :keywords)
end
end
我的模特: solution.rb
class Solution < ActiveRecord::Base
attr_accessible :text, :keywords, :contar , :user_id
before_save { |solution| solution.keywords = solution.keywords.downcase }
default_scope -> { order('contar DESC') }
validates :text, presence: true, uniqueness: { case_sensitive: false }
VALID_KEYS_REGEX = /\A([a-zA-Z]{3,})+(&|\|[a-zA-Z]{3,}+)*\z/i
validates :keywords, presence:true, format: { with: VALID_KEYS_REGEX }
end
答案 0 :(得分:0)
看起来你的解决方案对象没有被保存,大概是因为它的验证失败了。对于失败的@solution对象,通常会在表单中收到一些错误消息,但是您从未看到过这些错误消息,因为您每次都会覆盖@solution。
应该发生的是:
a)制作一个新的
- 新操作会生成一个新的@solution对象,并呈现一个使用form_for @solution
b)保存一个新的
- create动作使用params [:solution]创建一个新的@solution对象。如果无法保存,则会呈现使用form_for @solution
的同一页面。此页面通常会显示@solution的错误。
当@Pavan说&#34;尝试这样做<%= form_for(@solution, ...
&#34;时,他假设每个使用此表单呈现页面的操作都会定义@solution
。这是标准的固定方式。
此外,form_for将自动发送到创建或更新操作,具体取决于它是否是新对象。所以,你不应该强迫它创建你正在使用url选项。
我会改变你的代码:
#controller
def create
@solution = Solution.new(params[:solution])
if @solution.save
flash.now[:success] = "New Solution created!"
#redirect wherever you go after the object is saved
else
render :template => <your page with the form partial>
end
end
def update
@solution = Solution.find(params[:id])
@solution.attributes = params[:solution]
if @solution.save
flash.now[:success] = "Solution saved!"
#redirect wherever you go after the object is saved
else
render :template => <your page with the form partial>
end
end
#view
...
<%= form_for(@solution) do |f| %>
...