Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.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 如何在RoR中将字符串属性呈现为URL_Ruby On Rails_Ruby_Erb - Fatal编程技术网

Ruby on rails 如何在RoR中将字符串属性呈现为URL

Ruby on rails 如何在RoR中将字符串属性呈现为URL,ruby-on-rails,ruby,erb,Ruby On Rails,Ruby,Erb,下面是一个RoR教程,我正在构建一个基本的书签应用程序 我有两种型号,topic和bookmark 书签具有url属性。url属性在我的主题#show中呈现良好,但为纯文本。当我试图将其呈现为链接时,它没有正确链接到url 如何将其呈现为超链接 我试过这个 <%= @topic.bookmarks.each do |bookmark| %> <a href="#{bookmark.url}">bookmark.url</a> <% end %>

下面是一个RoR教程,我正在构建一个基本的书签应用程序

我有两种型号,
topic
bookmark

书签具有
url
属性。
url
属性在我的
主题#show
中呈现良好,但为纯文本。当我试图将其呈现为链接时,它没有正确链接到url

如何将其呈现为超链接

我试过这个

<%= @topic.bookmarks.each do |bookmark| %>
<a href="#{bookmark.url}">bookmark.url</a>
<% end %>
结束

我的书签控制器

类BookmarksController
 def index
   @topics = Topic.all
 end

 def new
   @topic = Topic.new
 end

 def show
   @topic = Topic.find(params[:id])  
 end

 def create
   @topic = Topic.new(params.require(:topic).permit(:name))
   if @topic.save
     redirect_to @topic
   else
     render :new
   end
 end
 def create
   @topic = Topic.find(params[:topic_id])
   @bookmarks = @topic.bookmarks
   @bookmark = @topic.bookmarks.build(params.require(:bookmark).permit(:url, :topic_id))
   @bookmark.topic = @topic
   @new_bookmark = Bookmark.new
   if @bookmark.save
     flash[:notice] = "Bookmark was saved"
     redirect_to @topic
   else
     flash[:error] = "There was an error, please try again later"
     redirect_to @topic
   end
 end

 def destroy
   @topic = Topic.find(params[:topic_id])
   @bookmark = Bookmark.find(params[:id])
   @bookmark.topic = @topic

   if @bookmark.destroy
     flash[:notice] = "Bookmark was destroyed successfully"
     redirect_to [@topic]
   else
     flash[:error] = "There was an error, please try again later"
   end
 end
结束

这些是我的迁移文件

class CreateTopics < ActiveRecord::Migration
  def change
    create_table :topics do |t|
      t.string :name

      t.timestamps
    end
  end
end


class CreateBookmarks < ActiveRecord::Migration
  def change
    create_table :bookmarks do |t|
      t.string :url
      t.references :topic, index: true

      t.timestamps
    end
  end
end
主题#show

<%= form_for [@topic, @topic.bookmarks.new] do |f| %>
 <div class="col-md-5">
   <div class="form-group">
    <%= f.text_field :url, placeholder: "Enter bookmark url", class: 'form-control' %>
 </div>
    <%= f.submit "save", class: 'form-control' %>
 </div>
<% end %>

您是否尝试使用帮助器链接到


您是否尝试使用帮助器
链接到


除非字符串位于ERB块内,否则ERB不会插入字符串(

也就是说,在您的情况下,以下方法可行:

<a href="<%= bookmark.url %>">bookmark.url</a>


清洁的解决方案是使用另一个答案中提到的
link_to
。我只是认为理解为什么原始解决方案不起作用很重要。

ERB不会插入字符串,除非它们位于ERB块内(

也就是说,在您的情况下,以下方法可行:

<a href="<%= bookmark.url %>">bookmark.url</a>


清洁的解决方案是使用另一个答案中提到的
link_to
。我只是认为理解原始解决方案不起作用的原因很重要。

您可以使用
链接到
助手方法:

<%= @topic.bookmarks.each do |bookmark| %>
  <%= link_to bookmark.url, bookmark.url %>
<% end %>


更多信息

您可以使用
链接到
助手方法:

<%= @topic.bookmarks.each do |bookmark| %>
  <%= link_to bookmark.url, bookmark.url %>
<% end %>



更多信息

这是另一个问题。假设您有一个带有有效URL的书签对象,
link\u to
应该可以正常工作。我使用它是因为从其他角度看,我所有的链接,或者在上面代码的例子中,一个按钮,都将以“name”而不是链接名呈现。嗯。。对我发布的代码就是一个例子;
link_to
的第一个参数是在输出中显示为链接文本的内容“名字”只是一个占位符。是的,我知道。但在我意识到我必须在“https://”前面加上前缀之前,有另一个用户在我的问题上下文中给了我代码!我的问题的答案到处都是。所以我想说清楚,以防其他人有问题!再次感谢你!那是另一个问题。假设您有一个带有有效URL的书签对象,
link\u to
应该可以正常工作。我使用它是因为从其他角度看,我所有的链接,或者在上面代码的例子中,一个按钮,都将以“name”而不是链接名呈现。嗯。。对我发布的代码就是一个例子;
link_to
的第一个参数是在输出中显示为链接文本的内容“名字”只是一个占位符。是的,我知道。但在我意识到我必须在“https://”前面加上前缀之前,有另一个用户在我的问题上下文中给了我代码!我的问题的答案到处都是。所以我想说清楚,以防其他人有问题!再次感谢你!我输入了
,但出现了一个路由错误-
没有与[GET]匹配的路由“/topics/www.google.com”
您应该检查bookmark.url的内容。尝试添加
并检查控制台输出。这与

相同吗?因为字符串被呈现为纯文本。我输入了
,但出现了路由错误-
没有与[GET]匹配的路由“/topics/www.google.com”
您应该检查bookmark.url的内容。尝试添加
并检查控制台输出。这与

相同吗?因为字符串被呈现为纯文本。我得到了错误
没有路由匹配[GET]“/topics/www.google.com”
。只是在问题中添加了它@deventhusist您需要确保使用
http://
前缀保存URL,否则URL将被视为相对于服务器的根。谢谢!如果您不介意的话,最后一件事是——如何在新选项卡中打开目标?这个的助手等价物是什么?指向
帮助程序的
链接\u接受散列作为最后一个参数,因此您提供的任何键值对都将在输出中转换为attribute=“…”,因此我猜您可以执行
我得到错误
没有路由匹配[GET]“/topics/www.google.com”
。只是在问题中添加了它@deventhusist您需要确保使用
http://
前缀保存URL,否则URL将被视为相对于服务器的根。谢谢!如果您不介意的话,最后一件事是——如何在新选项卡中打开目标?这个的助手等价物是什么?指向
帮助程序的
链接\u接受散列作为最后一个参数,因此您提供的任何键值对都将在输出中转换为attribute=“…”,因此我猜您可以执行