在我的应用程序中创建配方功能不起作用(Ruby on Rails)

时间:2017-07-21 21:26:41

标签: jquery ruby-on-rails ruby

我有两个模型,ChefRecipe。现在,我的应用程序中的create函数无效,即使已经定义了函数create,它也没有将我重定向到任何地方,当我移动光标时它也没有显示任何链接我的应用程序中的按钮。

我的代码:

/controllers/recipes_controller.rb

class RecipesController < ApplicationController

    def index
        @recipes=Recipe.all
    end

    def show
        @recipe=Recipe.find(params[:id])
    end

    def new
        @recipe=Recipe.new
    end

    def create
        @recipe=Recipe.new(recipe_params)

        if @recipe.save
            flash[:notice] = "Your Recipe was created successfully ! "
            redirect_to recipes_path
        else
            render :new
        end
    end

    def edit
        @recipe=Recipe.find(params[:id])
    end

    def update
        @recipe=Recipe.find(params[:id])
        if @recipe.update!(recipe_params)
            #do something
            flash[:notice]= "Your Recipe was updated Successfully"
            redirect_to recipe_path(@recipe)
        else
            render :edit
        end
     end

    private

        def recipe_params
            params.require(:recipe).permit(:name, :summary, :description, :picture)
        end

end

/views/recipes/_form.html.erb

<p>
  <h1>create a new recipe</h1>
</p>

<div class="row">
    <div class="well col-md-8 col-md-offset-2>
        <%= form_for @recipe do |f| %>

        <%= f.label :name %>
        <%= f.text_field :name %>

        <%= f.label :summary %>
        <%= f.text_field :summary %>

        <%= f.label :description %>
        <%= f.text_area :description, rows: 10  %>

        <%= f.button :submit ,input_html: { class: "btn btn-success" } %>
        <% end %> 

    </div>
</div>

/models/recipe.rb

class Recipe < ApplicationRecord
  belongs_to :chef
  validates :chef_id, presence: true
  validates :name, presence: true, length: { minimum: 5, maximum: 100}
  validates :summary, presence: true, length: { minimum: 10, maximum: 150}
  validates :description, presence: true, length: { minimum: 20, maximum: 500}
end

/models/chef.rb

class Chef < ApplicationRecord

has_many :recipes
has_many :likes

before_save { self.email = email.downcase}
validates :chefname, presence: true, length: { minimum: 3, maximum: 40}
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, length: {maximum: 105}, uniqueness: {case_sensitive: false}, format: {with: VALID_EMAIL_REGEX}

/config/routes.rb

  get 'pages/home'
  root 'pages#home'


  resources :recipes
end

/assets/javascript/application.js

//= require bootstrap-sprockets
//= require rails-ujs
//= require turbolinks
//= require_tree .

Ps: - 最近阅读了一篇文章,其中说由于 jquery 在页面上重新加载两次而导致问题可能存在。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

这不是jquery错误

Rails使用与die "Must run on MoarVM, not $*VM.name()" unless $*VM.name eq 'moar'; 协议一起使用的ujs上的remote links,而不是简单的ajax链接。

创建HTTP关系后,它停止了工作?

似乎您的控制器尚未准备好接收chef,而且它是chef_id。 此外,您的表单似乎没有准备好在html上显示此错误,因此请检查您的终端日志,您的验证错误将打印在其上。

编辑。我会尝试更好地解释造成错误的原因。

创建required field关系后,您的belongs_to: chef需要与某些recipe相关联。您可能对您的应用说,chef有很多chef,并且recipes在没有recipe的情况下无法存在。 在您的控制器上,您创建的chef没有recipe

chef是用户,而您正在使用chef gem?