2016-12-12 1 views
0

Hallo an alle, Ich habe Stackoverflow gesucht, aber noch keine Antwort gefunden, also frage ich direkt.Ruby On Rails: Unerreichte Parameter mit hat viele

Ich habe eine einfache Tabelle namens Nachricht, die eine Benutzer-ID und einen Inhalt enthält. Ich habe jetzt eine zweite und eine dritte Tabelle, die die Nachrichten-ID aus der Nachrichtentabelle, eine Empfänger-ID und eine Sichtbarkeit enthält.

Wenn ich das Formular abschicke, habe ich immer den gleichen Fehler: Unerreichte Parameter: message_recipients, message_groups. Auch wenn ich sie in der Genehmigung hinzufügen ...

Lassen Sie mich Ihnen zeigen:

Message.rb

class Message < ActiveRecord::Base 
    include Tenantable 

    belongs_to :user 
    has_many :message_recipients 
    has_many :message_groups 

    validates :content, :user, presence: true 

    default_scope { order(created_at: :desc) } 
end 

message_recipient.rb

class MessageRecipient < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :message 
end 

message_group .rb

class MessageGroup < ActiveRecord::Base 
    belongs_to :user_group 
    belongs_to :message 
end 

messages_controller.rb

class MessagesController < ApplicationController 
    # GET /messages/new 
    def new 
    @message = Message.new 
    end 

    # POST /messages 
    def create 
    @message = Message.new(message_params) 
    @message.user = current_user 

    respond_to do |format| 
     if @message.message_recipients.empty? 
     format.html { render :new} 
     else 
     if @message.save 
      @message.message_recipients.user = current_user 
      @message.message_recipients.message = @message 

      format.html { redirect_to authenticated_root_path, notice: t('messages.created') } 
     else 
      format.html { render :new } 
     end 
     end 
    end 
    end 

    private 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def message_params 
    params.require(:message).permit(:content, { message_recipient_ids: [], message_group_ids: [] }) 
    end 
end 

_form.html.erb

<% if @message.errors.any? %> 
<div class="alert alert-danger" role="alert"> 
    <h4><span class="glyphicon glyphicon-alert" aria-hidden="true"></span> <%= t('activerecord.errors.record_invalid', count: @message.errors.count) %></h4> 
    <ul> 
    <% @message.errors.full_messages.each do |message| %> 
    <li><%= message %></li> 
    <% end %> 
    </ul> 
</div> 
<% end %> 
<%= form_for(@message, html: { class: 'form-horizontal' }) do |f| %> 
    <div class="form-group"> 
     <%= f.label :message_recipients, class: 'col-sm-2 control-label' %> 
     <div class="col-sm-3"> 
     <%= f.select :message_recipients, options_for_select(User.all.map { |s|[s.firstname + ' ' + s.lastname, s.id] }) %> 
     </div> 
    </div> 
    <div class="form-group"> 
     <%= f.label :message_groups, class: 'col-sm-2 control-label' %> 
     <div class="col-sm-3"> 
     <%= f.select :message_groups, options_for_select(UserGroup.all.map { |s|[s.name, s.id] }) %> 
     </div> 
    </div> 
    <div class="form-group"> 
    <%= f.label :content, class: 'col-sm-2 control-label' %> 
    <div class="col-sm-3"> 
     <%= f.text_area :content, class: 'form-control' %> 
    </div> 
    </div> 
    <div class="form-group"> 
    <div class="col-sm-3 col-sm-offset-2"> 
     <button type="submit" class="btn btn-primary"><%= t('actions.save') %></button> 
    </div> 
    </div> 
<% end %> 

Antwort

0

In Ihrem Formular Ihre Feldnamen ändern entsprechen, was Sie in Ihrem Controller erlaubt haben .

:message_recipients-":message_recipient_ids"

+0

noch nicht funktioniert ... Ich habe Erlaubnis zu so etwas wie params.require geändert (: Nachricht) .permit (: Inhalt,: message_recipients => []) aber immer noch nichts ... – Stiiks

0

Hier soll, dass der Trick. Nicht gerade die beste Lösung, aber immer noch ein gültiger

class MessagesController < ApplicationController 
    # GET /messages/new 
    def new 
    @message = Message.new 
    end 

    # POST /messages 
    def create 
    @message = Message.new(message_params) 
    @message.user = current_user 

    if @message.message_recipients.empty? 
     format.html { render :new} 
    else 
     if @message.save 
     create_message_recipients 
     create_message_groups 

     format.html { redirect_to authenticated_root_path, notice: t('messages.created') } 
     else 
     format.html { render :new } 
     end 
    end 
    end 

    private 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def message_params 
    params.require(:message).permit(:content) 
    end 

    def create_message_recipients 
    params[:message][:message_recipients].each do |user_id| 
     MessageRecipient.create(user_id: user_id, message_id: @message.id) 
    end 
    end 

    def create_message_groups 
    params[:message][:message_groups].each do |group_id| 
     MessageGroup.create(group_id: group_id, message_id: @message.id) 
    end 
    end 
end