Ruby on rails 。每个循环返回[]。表格/控制员问题

Ruby on rails 。每个循环返回[]。表格/控制员问题,ruby-on-rails,Ruby On Rails,我有RoR 4.2.0测试版。(尽管这是一个beginer问题,因此与此无关) 我的表单没有在数据库中插入我通过它创建的“propune”。因此,当我重定向到索引页时,它们不会显示在索引页中。当我通过控制台创建它们时,它们就会显示出来 class PropuneresController < ApplicationController before_action :prop_params def new @user = User.find(params[:user_id])

我有RoR 4.2.0测试版。(尽管这是一个beginer问题,因此与此无关)

我的表单没有在数据库中插入我通过它创建的“propune”。因此,当我重定向到索引页时,它们不会显示在索引页中。当我通过控制台创建它们时,它们就会显示出来

  class PropuneresController < ApplicationController

before_action :prop_params

def new
    @user = User.find(params[:user_id])
    @propunere = @user.propuneres.build



end

def create
    @user= User.find(params[:user_id])
    @propunere = @user.propuneres.new(params[:prop_params])
    @propunere.save
        if @propunere.empty?
            render 'new'

        else 
        redirect_to user_propuneres_path    
        end
end


def index
    @user = User.find(params[:user_id])
    @propunere = @user.propuneres(params[:prop_params])
end


private

    def prop_params
    params.require(:propunere).permit(:titlu, :body)
    end


end
class PropuneresController
new.html.erb

<h2> Propunere Nouă </h2>

<%= form_for @propunere do |f| %>
  <ul>
  <% @propunere.errors.full_messages.each do |error| %>
    <li><%= error %></li>
  <% end %>
  </ul>


  <p>
    <%= f.label :titlu %><br />
    <%= f.text_field :titlu %>
  </p>
  <p>
    <%= f.label :body %><br />
    <%= f.text_area :body %>
  </p>


  <p>
    <%= f.submit %>
  </p>
<% end %>
propune Nouă


index.html.erb

<h2> Propuneri: </h2>

<% @propunere.each do |p| %>
    <%= p.titlu %>
    <%= p.body %>
    <% end %>
Propuneri:

我认为索引操作中不需要参数:

@propunere = @user.propuneres
用复数形式写会更符合逻辑,因为你有很多


编辑:

正如Avdept所建议的,您的创建操作应如下所示:

 def create
   @user = User.find(params[:user_id])
   @propunere = @user.propuneres.new(prop_params)
   respond_to do |format|
     if @propunere.save
       format.html { redirect_to user_propuneres_path(@user), notice: 'Your propunere has been saved' }
     else
       format.html { render :new }
     end
   end
 end

我认为在索引操作中不需要参数:

@propunere = @user.propuneres
用复数形式写会更符合逻辑,因为你有很多


编辑:

正如Avdept所建议的,您的创建操作应如下所示:

 def create
   @user = User.find(params[:user_id])
   @propunere = @user.propuneres.new(prop_params)
   respond_to do |format|
     if @propunere.save
       format.html { redirect_to user_propuneres_path(@user), notice: 'Your propunere has been saved' }
     else
       format.html { render :new }
     end
   end
 end

我认为在索引操作中不需要参数:

@propunere = @user.propuneres
用复数形式写会更符合逻辑,因为你有很多


编辑:

正如Avdept所建议的,您的创建操作应如下所示:

 def create
   @user = User.find(params[:user_id])
   @propunere = @user.propuneres.new(prop_params)
   respond_to do |format|
     if @propunere.save
       format.html { redirect_to user_propuneres_path(@user), notice: 'Your propunere has been saved' }
     else
       format.html { render :new }
     end
   end
 end

我认为在索引操作中不需要参数:

@propunere = @user.propuneres
用复数形式写会更符合逻辑,因为你有很多


编辑:

正如Avdept所建议的,您的创建操作应如下所示:

 def create
   @user = User.find(params[:user_id])
   @propunere = @user.propuneres.new(prop_params)
   respond_to do |format|
     if @propunere.save
       format.html { redirect_to user_propuneres_path(@user), notice: 'Your propunere has been saved' }
     else
       format.html { render :new }
     end
   end
 end

不确定它是否相关,但您有代码

@propunere.save
        if @propunere.empty?
            render 'new'

        else 
        redirect_to user_propuneres_path    
        end
对象@prorunere将永远不会为空,因为您已经
@propune=@user.propune.new
,它将
用户id
分配给您的
@propune
对象和
render'new'
将永远不会被呈现,因此您不会看到任何验证错误,也永远不会找到未创建记录的原因

另外,因为你有那段代码,并且没有看到错误,这就是你最喜欢的代码

@user.propuneres.new(params[:prop_params])
-您应该使用您允许的参数,因此


@propune=@user.propune.new(prop_参数)

不确定它是否相关,但您有代码

@propunere.save
        if @propunere.empty?
            render 'new'

        else 
        redirect_to user_propuneres_path    
        end
对象@prorunere将永远不会为空,因为您已经
@propune=@user.propune.new
,它将
用户id
分配给您的
@propune
对象和
render'new'
将永远不会被呈现,因此您不会看到任何验证错误,也永远不会找到未创建记录的原因

另外,因为你有那段代码,并且没有看到错误,这就是你最喜欢的代码

@user.propuneres.new(params[:prop_params])
-您应该使用您允许的参数,因此


@propune=@user.propune.new(prop_参数)

不确定它是否相关,但您有代码

@propunere.save
        if @propunere.empty?
            render 'new'

        else 
        redirect_to user_propuneres_path    
        end
对象@prorunere将永远不会为空,因为您已经
@propune=@user.propune.new
,它将
用户id
分配给您的
@propune
对象和
render'new'
将永远不会被呈现,因此您不会看到任何验证错误,也永远不会找到未创建记录的原因

另外,因为你有那段代码,并且没有看到错误,这就是你最喜欢的代码

@user.propuneres.new(params[:prop_params])
-您应该使用您允许的参数,因此


@propune=@user.propune.new(prop_参数)

不确定它是否相关,但您有代码

@propunere.save
        if @propunere.empty?
            render 'new'

        else 
        redirect_to user_propuneres_path    
        end
对象@prorunere将永远不会为空,因为您已经
@propune=@user.propune.new
,它将
用户id
分配给您的
@propune
对象和
render'new'
将永远不会被呈现,因此您不会看到任何验证错误,也永远不会找到未创建记录的原因

另外,因为你有那段代码,并且没有看到错误,这就是你最喜欢的代码

@user.propuneres.new(params[:prop_params])
-您应该使用您允许的参数,因此


@propune=@user.propune.new(prop_参数)

您对propune模型有任何验证吗?也许模型是无效的。你可以用
createcreate
进行测试,因为如果无法保存对象,它将引发异常。另外,请尝试放置@propunere。在保存它之前检查它,并检查对象的内容是否正常,输出将显示在开发日志中。

您对propunere模型有任何验证吗?也许模型是无效的。你可以用
createcreate
进行测试,因为如果无法保存对象,它将引发异常。另外,请尝试放置@propunere。在保存它之前检查它,并检查对象的内容是否正常,输出将显示在开发日志中。

您对propunere模型有任何验证吗?也许模型是无效的。你可以用
createcreate
进行测试,因为如果无法保存对象,它将引发异常。也可以尝试放置@propune。检查