Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在samve视图中创建和显示项目_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 在samve视图中创建和显示项目

Ruby on rails 在samve视图中创建和显示项目,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,在尝试构建表单以在索引页而不是新视图上创建新项时,我遇到了一个奇怪的问题 在当前项目中显示用于创建新任务的表单时,包含应显示在下面列表中的任务的@tasks变量似乎为空。因此,我得到一个“无路由匹配”,因为我传递给ie的对象。complete_project_task_路径为零 移除表单时,一切都像一个符咒。你知道为什么会这样吗 <h1>Listing tasks</h1> <%= form_for([@project, @project.tasks.build]

在尝试构建表单以在索引页而不是新视图上创建新项时,我遇到了一个奇怪的问题

在当前项目中显示用于创建新任务的表单时,包含应显示在下面列表中的任务的@tasks变量似乎为空。因此,我得到一个“无路由匹配”,因为我传递给ie的对象。complete_project_task_路径为零

移除表单时,一切都像一个符咒。你知道为什么会这样吗

<h1>Listing tasks</h1>

<%= form_for([@project, @project.tasks.build]) do |f| %>
    <div id="new_quick_task">
        <%= f.text_field :title, :value => 'Quickly add a new task' %>
        <%= f.submit %>
    </div>
<% end %>

<div id="task_list">
    <% @tasks.each do |task| %>

        <div class="task">
            <div class="completed"><%= task.completed %></div>
            <div class="complete_link"><%= link_to "Good", complete_project_task_path(@project, task) %></div>
            <div class="title"><%= link_to task.title, project_task_path(@project, task) %></div>
        </div>
    <% end %>
</div> <!-- end task_list -->
列出任务
'快速添加新任务'%>

为什么使用
@tasks
而不使用
@project.tasks
?因为它将显示您为表单?创建的新任务

好的,您仍然可以使用
@project.tasks
执行以下操作:

<% @project.tasks.each do |task| %>
  <% unless task.title.nil? %>
    <div class="task">
        <div class="completed"><%= task.completed %></div>
        <div class="complete_link"><%= link_to "Good", complete_project_task_path(@project, task) %></div>
        <div class="title"><%= link_to task.title, project_task_path(@project, task) %></div>
    </div>
  <% end %>
<% end %>

这将跳过没有标题的任务


您得到的错误不是因为
@tasks
变量为空,因为如果为空,您将永远无法找到它下面的代码。您得到的错误是
@tasks
中的一个项目包含它不期望的值。我猜这与您的
完成项目任务路径(@project,task)
有关,它将检查未正确设置的
任务的某些内容?

为什么使用
@tasks
而不是
@project.tasks
?因为它将显示您为表单?创建的新任务

好的,您仍然可以使用
@project.tasks
执行以下操作:

<% @project.tasks.each do |task| %>
  <% unless task.title.nil? %>
    <div class="task">
        <div class="completed"><%= task.completed %></div>
        <div class="complete_link"><%= link_to "Good", complete_project_task_path(@project, task) %></div>
        <div class="title"><%= link_to task.title, project_task_path(@project, task) %></div>
    </div>
  <% end %>
<% end %>

这将跳过没有标题的任务


您得到的错误不是因为
@tasks
变量为空,因为如果为空,您将永远无法找到它下面的代码。您得到的错误是
@tasks
中的一个项目包含它不期望的值。我猜这与您的
完成项目任务路径(@project,task)
有关,它将检查
任务中未正确设置的部分?

所以我想我已经找到了答案。(如果我错了,请纠正我)

Ruby变量包含对 对象,并且=运算符复制 参考资料

(摘自第17号)

考虑到这一点,请看下面的示例

@task_list = @project.tasks
这本质上使
@task\u list
引用与
@project.tasks
相同的对象。如果
@project.tasks
中的数据发生更改,
@task\u列表的
数据也会发生更改,因为它们都指向同一个对象

@project.tasks.build
似乎改变了
@project.taks
@task\u list
以某种方式指向的对象

解决办法很简单。我没有设置@task\u list=@project.tasks,而是为@task\u list创建了一个新对象

因此,在控制器中,我不想这样做:

@project = Project.find(params[:project_id])
@task_list = @project.tasks
就这样做吧:

@project = Project.find(params[:project_id])
@taks_list = Task.where(:project_id => @project.id)

所以我想我明白了。(如果我错了,请纠正我)

Ruby变量包含对 对象,并且=运算符复制 参考资料

(摘自第17号)

考虑到这一点,请看下面的示例

@task_list = @project.tasks
这本质上使
@task\u list
引用与
@project.tasks
相同的对象。如果
@project.tasks
中的数据发生更改,
@task\u列表的
数据也会发生更改,因为它们都指向同一个对象

@project.tasks.build
似乎改变了
@project.taks
@task\u list
以某种方式指向的对象

解决办法很简单。我没有设置@task\u list=@project.tasks,而是为@task\u list创建了一个新对象

因此,在控制器中,我不想这样做:

@project = Project.find(params[:project_id])
@task_list = @project.tasks
就这样做吧:

@project = Project.find(params[:project_id])
@taks_list = Task.where(:project_id => @project.id)

虽然这会起作用,但您正在复制/重新实现已有的关联代码。我提供的解决方案将忽略列表中的新对象,并且通常会完全满足您的要求。虽然这会起作用,但您正在复制/重新实现已有的关联代码。我提供的解决方案将忽略列表中的新对象,并且通常完全按照您的要求执行。