2015-04-13 84 views
0

我与地点和事件有关系has_and_belongs_to_many。当我创建一个事件不保存地方参数,但是是其他参数。但是,当我想编辑一个事件时,这不会使用保存的参数。 (image)¿参数有什么问题,为什么不保存这个关系?由于参数丢失或值为空不参数,只是身份证

事件模型

cla 
 
\t \t has_and_belongs_to_many :users 
 
\t \t has_and_belongs_to_many :sponsors 
 
\t \t has_and_belongs_to_many :category 
 
\t \t has_and_belongs_to_many :places 
 
    accepts_nested_attributes_for :places 
 
    
 
end

放置模型

\t has_and_belongs_to_many :events \t 
 
\t \t has_one :scores 
 
\t \t has_and_belongs_to_many :categorys 
 
\t 
 
    accepts_nested_attributes_for :events

活动控制器

class EventsController < ApplicationController 
 
    
 
    before_action :events_params, only: [:create, :edit] 
 

 

 

 

 
    def index 
 
    \t @event = Event.all 
 
    end 
 

 
def show 
 
    @event = Event.find(get_event) 
 

 
    end 
 

 
    def new 
 
    \t @event = Event.new 
 
    end 
 

 
def create 
 
    @event = Event.new(events_params) 
 

 
    if @event.save 
 
     redirect_to events_path, notice: "Almacenado" 
 
    else 
 
     render "new", notice: "Danm" 
 
    end 
 
    end 
 

 
def edit 
 
    params_filtered = Event.find(events_params) 
 
    @event = Event.find(get_event) 
 
    if @event.update(params_filtered) 
 
     redirect_to events_path 
 
    else 
 
     render 'new' 
 
    end 
 
    end 
 

 
    def destroy 
 
    @event = Event.find(get_event) 
 
    @event.destroy 
 
    redirect_to events_path 
 
    end 
 

 
    private 
 
    def events_params 
 
    params.require(:event).permit(:website,:city,:whybuy,:moendreinfo,:title,:description, :datestart, :dateend, :hourstart, :hourend, :price ,:avatar, :background, places_atributtes: []) 
 
    end 
 

 
def get_event 
 
    @event = Event.find(params[:id]) 
 
    end 
 

 

 

 

 
end

路线

Rails.application.routes.draw do 
 
    
 
    root 'welcome#index' 
 

 
    resources :places do 
 
    resources :events 
 
    end 
 

 
resources :events 
 
get "events/:id" => "events#show" 
 
get "events/:id/edit" => "events#edit" 
 
    
 
    devise_for :users, :controllers => { registrations: 'registrations' } 
 

 
    devise_scope :users do 
 
    get "profile_user/:id" => "users_profiles#profile_user" 
 
    get "usersall" => "users_profiles#usersall" 
 
    end 
 

 
end

错误错误的链接

i.stack.imgur.com/Snl2m.png

形成该事件的新

<html> 
 
<head> 
 
\t 
 
    \t <title></title> 
 
    </head> 
 
    <body id="newevent"> 
 
    \t <h3> Crear Evento </h3> 
 
    <div class="container-fluid"> 
 
     <div class="row"> 
 
      <div class="col-xs-12 col-sm-12 col-md-12 "> 
 

 
      
 
       <di> 
 
        <div id="divnewevent" > 
 

 
         <%=form_for @event do |eve|%> 
 
         \t <%= eve.label :title, "Titulo del evento" %></br> 
 
          <%= eve.text_field :title, class:"form-control", placeholder:"Stingi Fest Back Color", autofocus: true%></br> 
 
         \t <%= eve.label :description, "Descripción" %></br> 
 
         \t <%= eve.text_field :description, class:"form-control", placeholder:"No debe superar los 140 caracteres", autofocus: true%></br> 
 
         \t 
 
          <%= eve.collection_select(:place_ids, Place.all, :id, :name, {prompt: true}, {multiple: true, class: "input-lg"}) %> 
 
          
 
          <%= eve.label :datestart, "Fecha de apertura" %></br> 
 
          \t <%= eve.date_select :datestart, class:"form-control", placeholder:"Fecha de apertura o día del evento", autofocus: true %></br> 
 

 
         \t <%= eve.label :dateend, "Fecha de cierre" %></br> 
 
         \t <%= eve.date_select :dateend, class:"form-control", placeholder:"Fecha de cierre o día del evento", autofocus: true %></br> 
 
         \t <%= eve.label :hourstart, "Hora inicio" %></br> 
 
         \t <%= eve.time_select :hourstart, class:"form-control", placeholder:"Hora de inicio", autofocus: true %> </br> 
 
         \t 
 
         \t <%= eve.label :hourend, "Hora cierre" %></br> 
 
         \t <%= eve.time_select :hourend, class:"form-control", placeholder:"Hora de cierre", autofocus: true %></br> 
 

 
          <%= eve.label :website, "website" %></br> 
 
          <%= eve.text_field :website, class:"form-control", placeholder:"www.cosito.com", autofocus: true %></br> 
 

 
          <%= eve.label :city, "ciudad" %></br> 
 
          <%= eve.text_field :city, class:"form-control", placeholder:"Ciudad,co", autofocus: true %></br> 
 

 
          <%= eve.label :price, "Costo" %> 
 
          <%= eve.text_field :price, class:"form-control", placeholder:"Costo de entrada", autofocus: true %> </br> 
 
         
 
          
 
          <%= eve.label :whybuy, "Por qué asistir o comprar y dónde" %></br> 
 
          <%= eve.text_field :whybuy, class:"form-control", placeholder:"Plus de insentivo y donde comprar", autofocus: true %></br> 
 
          <%= eve.label :moreinfo, "más info" %></br> 
 
          <%= eve.text_field :moreinfo, class:"form-control", placeholder:"Mayor información", autofocus: true %></br> 
 
          <%= eve.label :avatar, "Foto de perfil" %> 
 
          <%= eve.file_field :avatar %> 
 
          <%= eve.label :background, "Foto de fondo" %> 
 
          <%= eve.file_field :background %> 
 

 

 

 
          <%= eve.submit %> 
 
         <%end%> 
 

 
          </div>     
 
        </div> 
 
       
 
       </div> 
 
      </div> 
 
     </div> 
 
    
 
    </body> 
 
</html>

回答

0

我有过低代表发表评论。

请显示窗体的视图。它看起来好像参数不辜负您的

params.require(:event) 

编辑:

我想你不使用你的event_params以正确的方式,你应该只当你想检查调用这个函数给定参数并查找允许的属性。

您应该删除

before_action :event_params 

但增加:

before_action :get_event, except: [:new, :index, :create] 

这将确保你将show, update, destroy之前设置在@事件变量的当前事件。

我认为你的罪魁祸首可能是你没有update-方法,你也出现在edit-方法中。

edit是加载可以编辑事件的页面的操作。 update是您从表单发送给您的操作。这是您将使用@event.update(...)的地方。

所以你editupdate可以看起来像:

def edit 
end 

def update 
    if @event.update(event_params) 
    redirect_to @event, notice: 'Event was updated' 
    else 
    render action: :edit 
    end 
end 

(如果您添加的before_action :get_event)。

相关问题