2014-05-07 33 views
1

我有一個表單來收集名稱和電子郵件將存儲爲我的郵件列表和我的路線有問題。路由表單提交到首頁視圖

我使用簡單形式的rails 4,當用戶點擊提交時,它們被自動重定向到所有輸入的細節的「列表」,這是標準的,我希望它們被路由到主頁而不是?

我基本上已經爲這個'臨時'數據收集生成了一個腳手架,我也想知道是否有一個gem來處理這個更好?

我一直在圍繞一圈現在任何幫助將不勝感激。

class DetailsController < ApplicationController 
before_action :set_detail, only: [:show, :edit, :update, :destroy] 

def index 
@details = Detail.all 
end 

def show 
end 

def new 
@detail = Detail.new 
end 

def edit 
end 

def create 
@detail = Detail.new(detail_params) 

respond_to do |format| 
    if @detail.save 
    format.html { redirect_to @detail, notice: 'Detail was successfully created.' } 
    format.json { render :show, status: :created, location: @detail } 
    else 
    format.html { render :new } 
    format.json { render json: @detail.errors, status: :unprocessable_entity } 
    end 
end 
end 

def update 
respond_to do |format| 
    if @detail.update(detail_params) 
    format.html { redirect_to @detail, notice: 'Detail was successfully updated.' } 
    format.json { render :show, status: :ok, location: @detail } 
    else 
    format.html { render :edit } 
    format.json { render json: @detail.errors, status: :unprocessable_entity } 
    end 
end 
end 

def destroy 
@detail.destroy 
respond_to do |format| 
    format.html { redirect_to details_url } 
    format.json { head :no_content } 
end 
end 

private 
def set_detail 
    @detail = Detail.find(params[:id]) 
end 

def detail_params 
    params.require(:detail).permit(:first_name, :last_name, :email) 
end 
end 

路線

Rails.application.routes.draw do 
get 'legal/terms' 

get 'legal/privacy' 

get 'static_pages/about' 

get 'static_pages/faq' 

resources :details 

get 'profiles/show' 

devise_for :users 

devise_scope :user do 
get 'register', to: 'devise/registrations#new', as: :register 
get 'signin', to: 'devise/sessions#new', as: :signin 
end 

resources :statuses 

resources :news 

get 'welcome/index' 

get '/:id', to: 'profiles#show' 

簡單的初始化

# Use this setup block to configure all options available in SimpleForm. 
SimpleForm.setup do |config| 
# Wrappers are used by the form builder to generate a 
# complete input. You can remove any component from the 
# wrapper, change the order or even add your own to the 
# stack. The options given below are used to wrap the 
# whole input. 
config.wrappers :default, class: :input, 
hint_class: :field_with_hint, error_class: :field_with_errors do |b| 
## Extensions enabled by default 
# Any of these extensions can be disabled for a 
# given input by passing: `f.input EXTENSION_NAME => false`. 
# You can make any of these extensions optional by 
# renaming `b.use` to `b.optional`. 

# Determines whether to use HTML5 (:email, :url, ...) 
# and required attributes 
b.use :html5 

# Calculates placeholders automatically from I18n 
# You can also pass a string as f.input placeholder: "Placeholder" 
b.use :placeholder 

## Optional extensions 
# They are disabled unless you pass `f.input EXTENSION_NAME => :lookup` 
# to the input. If so, they will retrieve the values from the model 
# if any exists. If you want to enable the lookup for any of those 
# extensions by default, you can change `b.optional` to `b.use`. 

# Calculates maxlength from length validations for string inputs 
b.optional :maxlength 

# Calculates pattern from format validations for string inputs 
b.optional :pattern 

# Calculates min and max from length validations for numeric inputs 
b.optional :min_max 

# Calculates readonly automatically from readonly attributes 
b.optional :readonly 

## Inputs 
b.use :label_input 
b.use :hint, wrap_with: { tag: :span, class: :hint } 
b.use :error, wrap_with: { tag: :span, class: :error } 

## full_messages_for 
# If you want to display the full error message for the attribute, you can 
# use the component :full_error, like: 
# 
# b.use :full_error, wrap_with: { tag: :span, class: :error } 
end 

# The default wrapper to be used by the FormBuilder. 
config.default_wrapper = :default 

# Define the way to render check boxes/radio buttons with labels. 
# Defaults to :nested for bootstrap config. 
# inline: input + label 
# nested: label > input 
config.boolean_style = :nested 

# Default class for buttons 
config.button_class = 'btn' 

# Method used to tidy up errors. Specify any Rails Array method. 
# :first lists the first message for each field. 
# Use :to_sentence to list all errors for each field. 
# config.error_method = :first 

# Default tag used for error notification helper. 
config.error_notification_tag = :div 

# CSS class to add for error notification helper. 
config.error_notification_class = 'error_notification' 

# ID to add for error notification helper. 
# config.error_notification_id = nil 

# Series of attempts to detect a default label method for collection. 
# config.collection_label_methods = [ :to_label, :name, :title, :to_s ] 

# Series of attempts to detect a default value method for collection. 
# config.collection_value_methods = [ :id, :to_s ] 

# You can wrap a collection of radio/check boxes in a pre-defined tag, defaulting to none. 
# config.collection_wrapper_tag = nil 

# You can define the class to use on all collection wrappers. Defaulting to none. 
# config.collection_wrapper_class = nil 

# You can wrap each item in a collection of radio/check boxes with a tag, 
# defaulting to :span. Please note that when using :boolean_style = :nested, 
# SimpleForm will force this option to be a label. 
# config.item_wrapper_tag = :span 

# You can define a class to use in all item wrappers. Defaulting to none. 
# config.item_wrapper_class = nil 

# How the label text should be generated altogether with the required text. 
# config.label_text = lambda { |label, required, explicit_label| "#{required} #{label}" } 

# You can define the class to use on all labels. Default is nil. 
# config.label_class = nil 

# You can define the class to use on all forms. Default is simple_form. 
# config.form_class = :simple_form 

# You can define which elements should obtain additional classes 
# config.generate_additional_classes_for = [:wrapper, :label, :input] 

# Whether attributes are required by default (or not). Default is true. 
# config.required_by_default = true 

# Tell browsers whether to use the native HTML5 validations (novalidate form option). 
# These validations are enabled in SimpleForm's internal config but disabled by default 
# in this configuration, which is recommended due to some quirks from different browsers. 
# To stop SimpleForm from generating the novalidate option, enabling the HTML5 validations, 
# change this configuration to true. 
config.browser_validations = false 

# Collection of methods to detect if a file type was given. 
# config.file_methods = [ :mounted_as, :file?, :public_filename ] 

# Custom mappings for input types. This should be a hash containing a regexp 
# to match as key, and the input type that will be used when the field name 
# matches the regexp as value. 
# config.input_mappings = { /count/ => :integer } 

# Custom wrappers for input types. This should be a hash containing an input 
# type as key and the wrapper that will be used for all inputs with specified type. 
# config.wrapper_mappings = { string: :prepend } 

# Default priority for time_zone inputs. 
# config.time_zone_priority = nil 

# Default priority for country inputs. 
# config.country_priority = nil 

# When false, do not use translations for labels. 
# config.translate_labels = true 

# Automatically discover new inputs in Rails' autoload path. 
# config.inputs_discovery = true 

# Cache SimpleForm inputs discovery 
# config.cache_discovery = !Rails.env.development? 

# Default class for inputs 
# config.input_class = nil 

# Define the default class of the input wrapper of the boolean input. 
config.boolean_label_class = 'checkbox' 

# Defines if the default input wrapper class should be included in radio 
# collection wrappers. 
# config.include_default_input_wrapper_class = true 

# Defines which i18n scope will be used in Simple Form. 
# config.i18n_scope = 'simple_form' 
end 

我希望這就是你以後正確的簡單形式的文件?

感謝您的幫助

+0

安置自己的'控制器code',也是你的'simple_form'代碼 – Pavan

+0

也發表您的'routes.rb'文件。 –

+0

什麼是分享這些最好的方式? – user3595157

回答

0
def create 
    @detail = Detail.new(detail_params) 

respond_to do |format| 
    if @detail.save 
    format.html { redirect_to root_path, notice: 'Detail was successfully created.' } #this is where the redirection is happening. change @detail to root_path 
    format.json { render :show, status: :created, location: @detail } 
    else 
    format.html { render :new } 
    format.json { render json: @detail.errors, status: :unprocessable_entity } 
    end 
end 
end 
+0

你是一個傳奇人物!非常感謝,非常簡單,但我從來沒有去找到我自己的。 – user3595157

+0

很高興能工作。 –

0

你想在其中您的形式張貼到控制器的動作結束更改重定向聲明。

舉例來說,如果你已經有了一個形式,如:

<%= form_for current_user do |f| %> 
    <%= f.text_field :name %> 
    <%= f.submit 'Save Changes' %> 
<%= end %> 

你要保持在UsersController發生的變化current_user。您只需要對錶單提交作出響應,使用戶登錄您的路線中定義的root_path即可。您可以通過在UsersController操作中添加redirect_to來實現此目的。

class UsersController < ApplicationController 
    def update 
    user = User.find(params[:id]) 
    # ... 
    redirect_to root_path 
    end 
end 
+0

我有點理解,但是我沒有「 UsersController「我的用戶是在配置文件中定義的。如果此數據收集要與註冊用戶分開,則上述更改將位於「DetailsController」def update respond_to do | format | if @ detail.update(detail_params) format.html {redirect_to @ detail,notice:'Detail was successfully updated。' } format.json {render:show,status:ok,location:@detail} else format.html {render:edit} format.json {render json:@ detail.errors,status :: unprocessable_entity} 結束 結束 – user3595157

+0

也爲什麼這是在更新而不是創建?如果重定向是在用戶首次訪問時輸入其詳細信息時發生的? – user3595157

+0

這只是一個例子。您需要在您的特定表單發佈到的控制器中進行此更改。在你的情況下,它看起來像你需要在'DetailsController'中進行更改。如果你正在創造一個新的記錄,就像你聽起來一樣,你需要在'DetailsController'的'create'動作中做出這個改變。您還需要在您的路由文件中定義您的'root'路徑:http://guides.rubyonrails.org/routing.html#using-root – Matthew