我无法保存数据库提交

时间:2014-06-09 10:07:19

标签: mysql ruby-on-rails database forms save

我没有错误但是当我点击“确定”(提交按钮)没有任何反应时,我的数据库根本没有变化, 我正在做我的应用程序,如我按下一个按钮,然后所有进一步的页面已经加载,我使用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

1 个答案:

答案 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| %>
...