2016-03-05 102 views
0

我有一个模板用于应用中的所有表单,但是,我想为不同的操作定义不同的表单提交按钮名称(例如,当我编辑文章I想从提交按钮显示文字更新文章,当我添加一篇文章,我想从提交按钮显示文字添加文章)。有没有办法做到这一点,但保持呈现相同的表单模板?在表单中提交不同名称的提交按钮

<%= form_for @article do |f| %> 

    <% if @article.errors.any? %> 
     <div id="error_explanation"> 
      <h2> 
       <%= pluralize(@article.errors.count, "error") %> 
       prohibited this article from saving 
      </h2> 
      <ul> 
       <% @article.errors.full_messages.each do |msg| %> 
        <li><%= msg %></li> 
       <% end %> 
      </ul> 
     </div> 
    <% end %> 

    <p> 
     <%= f.label :title %> 
     <%= f.text_field :title %> 
    </p> 

    <p> 
     <%= f.label :text %> 
     <%= f.text_area :text %> 
    </p> 

    <p> 
     <%= f.submit %> 
    </p> 

<% end %> 

这是ArticlesController:

class ArticlesController < ApplicationController 

    http_basic_authenticate_with name: "username", password: "pass", except: [:index, :show] 

    def index 
     @article = Article.all 
    end 

    def show 
     @article = Article.find(params[:id]) 
    end 

    def new 
     @article = Article.new 
    end 

    def edit 
     @article = Article.find(params[:id]) 
    end 

    def create 
     @article = Article.new(article_params) 

     if @article.save 
      redirect_to @article 
     else 
      render 'new' 
     end 
    end 

    def update 
     @article = Article.find(params[:id]) 

     if @article.update(article_params) 
      redirect_to @article 
     else 
      render 'edit' 
     end 
    end 

    def destroy 
     @article = Article.find(params[:id]) 
     @article.destroy 

     redirect_to articles_path 
    end 

    private 
     def article_params 
      params.require(:article).permit(:title, :text) 
     end 

end 
+0

可以显示文章控制器吗? –

+0

@RahulSingh我发布了它。 – Nikola

回答

2

定义一个辅助的方法来检查控制器&动作名称,然后返回按钮上的文字按照你需要

module ApplicationHelper 
    def button_text 
    if controller.action_name == "new" 
     return "Add" 
    elsif controller.action_name == "edit" 
     return "Update" 
    else 
     return "Submit" 
    end 
    end 
end 

然后使用按钮中定义的帮助方法

<%= f.submit button_text %> 

也可以使用controller_name,action_name帮助程序从Rails4获取控制器和操作名称。请参阅here

+1

没有它的帮助文件,而ApplicationHelper是默认的帮助文件,当您运行rails new命令来创建新的rails应用程序时会生成这个文件。你可以在app/helpers文件夹中找到它 –

0
<%= f.submit "My Submit Text" %> 

应该工作。

还哟也应该能够通过

<%= f.submit "My Submit Text", class: "class class class" %> 

通过类ATTRS如果您希望使用相同的形式,但有不同的操作,你需要创建一个局部_form.html.erb

内你需要传递“本地”变量。

在_form

...你必须

<%= f.submit button_id, class: "" %> 
+0

我知道如何命名按钮并提供类,但是我想在按钮上显示不同的文本以用于不同控制器的操作(添加/编辑/显示)。如果我在f.submit上提供了一个参数,它将显示在所有操作上。 – Nikola

+0

哦好吧...我会更新我的回答 –