2015-07-30 2 views
0

Я работаю над проектом в rails 4, где создаю динамические выпадающие списки. Ниже приведен код, который я сделал для этого раскрывающегося списка. Падения появляются, но не сохраняются на столе и не отображаются на шоу (и да, у меня есть правильный рубин, то есть <%= @reports.site_id %>.Динамическое раскрывающееся меню SelectBox в Rails Проблема

Я не уверен, что делать дальше, и я немного уверен рельсы нуб, но работал через учебники и классы на языке

Моей форма Select Box выглядит следующим образом:.

`<%= collection_select(:site, :site_id, Site.all, :id, :site_call_sign, {}, { :multiple => false %>` 

выше выбор доза коробки получить данные из таблицы сайта, но не будет сохранять эти данные к таблице отчетов. `

My Controller выглядит следующим образом:

class ReportsController < ApplicationController 
    before_action :set_report, only: [:show, :edit, :update, :destroy] 

    # GET /reports 
    # GET /reports.json 
    def index 

    @search = ReportDateSearch.new(params[:search]) 
    @reports = @search.scope 

    @reports = Report.all 


    # Adds CSV Downloader to Residents 
    respond_to do |format| 
    format.html 
    format.csv { render text: @reports.to_csv } 
    end 
    end 

    # GET /reports/1 
    # GET /reports/1.json 
    def show 
    end 

    # GET /reports/new 
    def new 
    @report = Report.new 
    end 

    # GET /reports/1/edit 
    def edit 
    end 

    # POST /reports 
    # POST /reports.json 
    def create 
    @report = Report.new(report_params) 

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

    # PATCH/PUT /reports/1 
    # PATCH/PUT /reports/1.json 
    def update 
    respond_to do |format| 
     if @report.update(report_params) 
     format.html { redirect_to @report, notice: 'Report was successfully updated.' } 
     format.json { render :show, status: :ok, location: @report } 
     else 
     format.html { render :edit } 
     format.json { render json: @report.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /reports/1 
    # DELETE /reports/1.json 
    def destroy 
    @report.destroy 
    respond_to do |format| 
     format.html { redirect_to reports_url, notice: 'Report was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 

    # Adds CSV Uploader Method to Application 
    def import 
     Report.import(params[:file]) 
     redirect_to reports_path, notice: "Report(s) Added Successfully" 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_report 
     @report = Report.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def report_params 
     params.require(:report).permit(:date, :site_id, :user_id, :type_of_report, :type_of_incident, :report) 
    end 
end 

моя модель выглядит следующим образом:

class Report < ActiveRecord::Base 

    belongs_to :user 
    belongs_to :site 

    def self.import(file) 
    CSV.foreach(file.path, headers: true) do |row| 
     Report.create! row.to_hash 
    end 
    end 

    def self.to_csv 
    CSV.generate do |csv| 
     csv << column_names 
     all.each do |report| 
     csv << report.attributes.values_at(*column_names) 
     end 
    end 
    end 

end 

My Show Page Похож:

<p id="notice"><%= notice %></p> 

<p> 

<strong>Date:</strong> 

<%= @report.date %> 

</p> 

<p> 

<strong>Site:</strong> 

<%= @report.site_id %> 

</p> 

<p> 

<strong>Created By:</strong> 

<%= @report.user_id %> 

</p> 

<p> 

<strong>Type of report:</strong> 

<%= @report.type_of_report %> 

</p> 

<p> 

<strong>Type of incident:</strong> 

<%= @report.type_of_incident %> 

</p> 

<p> 

<strong>Report:</strong> 

<%= @report.report %> 

</p> 

<%= link_to 'Edit', edit_report_path(@report) %> | 

<%= link_to 'Back', reports_path %> 

не слишком уверен, куда я иду неправильно здесь . Любая помощь будет принята с благодарностью

+1

Не могли бы вы изменить свой вопрос, чтобы показать больше своего контроллера? В частности, нам нужно увидеть, что действие действительно сохраняет отчет. –

+0

@SeanHuber Я добавил весь свой контроллер ... как было сказано в открытии вопроса, я все еще новичок в рельсах и думал, что полный обзор будет лучше, чем уловка дерьма, чтобы узнать, что вы хотели бы видеть. Благодарю. –

+0

Не беспокойтесь, проблема может произойти по разным причинам, и мне может потребоваться дополнительная информация. См. Мой первоначальный ответ ниже и дайте мне знать, если это сработает. Если нет, нам нужно будет взглянуть на представления для ваших новых действий и действий редактирования. –

ответ

1

Попробуйте изменить первый параметр, если ваш вызов collection_select f ром :site к :report:

<%= collection_select(:report, :site_id, Site.all, :id, :site_call_sign, {}, { :multiple => false } %> 

Моя первоначальная догадка, что ваша форма проходит вверх Site_ID, как params[:site_id] вместо params[:report][:site_id], который является формат, который вы должны были бы основаны на вашем сильном методе параметров в контроллере:

def report_params 
    params.require(:report).permit(:date, :site_id, :user_id, :type_of_report, :type_of_incident, :report) 
end 

Если это не сработает, вы можете сделать это, чтобы помочь отладить проблему, посмотрите на свою консоль рельсов и посмотрите точно формат, который ваши параметры формы отправляются из вашего представления в контроллер. Поставив пару ставит заявления в ваши действия могут помочь вам лучше сравнить params против report_params:

def create 
    puts "Params: #{params.inspect}" 
    puts "Report Params: #{report_params.inspect}" 

    @report = Report.new(report_params) 

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

Посмотрите на серверной консоли для вывода этих 2 ставит заявления. Если вы видите site_id в параметрах, а не в report_params, вы узнаете, что ваш метод сильных параметров отфильтровал его.

+0

Это сработало отлично! я был в сознании, что <% = collection_select (: site, <= ссылается на таблицу, из которой я вынимал столбец, а не тот, вот где он будет храниться! Я очень ценю вашу помощь! –

Смежные вопросы