2014-10-30 68 views
0

我是非常基本的Rails,我尝试从URL中保存图像,搜索后发现我已安装了Carrierwave gem。但我不知道如何继续。我也使用Backbone(我也很基本)。使用Carrierwave从URL保存图像

到目前为止,我创建了一个应用程序,用户可以在输入字段中输入电影名称,然后显示结果列表。

我moviesearch观点,

events: 
    "keyup input": "doSearch" 

doSearch: (e) -> 
    @collection.setQuery $(e.currentTarget).val() 
    @collection.fetch() 
    $('.autocomplete-results').show() 

doSearch功能被炒鱿鱼它转到moviesearch收集,

class Movieseat.Collections.Moviesearch extends Backbone.Collection 

    url: -> "http://api.themoviedb.org/3/search/movie?api_key=a8f7039633f2065942cd8a28d7cadad4&query=#{@query}" 

    setQuery: (q) -> 
    @query = q 
    return 

    parse: (response) -> 
    return response.results 

这导致这样的JSON文件,

http://api.themoviedb.org/3/search/movie?api_key=a8f7039633f2065942cd8a28d7cadad4&query=star%20war 

然后,我的searchresult视图呈现海中的moviesearch视图rchresult模板

template: JST['movieseats/searchresult'] 

initialize: -> 
    @collection.on('add', @render, this) 
    return 

render: -> 
    $(@el).html(@template(movie: @collection)) 
    this 

的信息搜索结果的模板,

<% for movie in @movie.models : %> 
    <li> 
     <img src="http://image.tmdb.org/t/p/w500/<%= movie.get('poster_path')%>"></img> 
     <span class="movie-title"><%= movie.get('title') %></span> 
     <p class="releaste_date"><%= movie.get('release_date') %></p> 
     <p class="addmovie">Add movie</p> 
    </li> 
<% end %> 

这一切都是骨干。以下步骤是存储数据。 addEntry函数将变量movie_title保存到我的Rails模型中。

addEntry: (e) -> 
    movie_title = $(e.target).parent().find('.movie-title').text() 
    @collection.create title: movie_title 

此函数查找在此模板的.movie-title文本,

<% for movie in @movie.models : %> 
    <li> 
     <img src="http://image.tmdb.org/t/p/w500/<%= movie.get('poster_path')%>"></img> 
     <span class="movie-title"><%= movie.get('title') %></span> 
     <p class="releaste_date"><%= movie.get('release_date') %></p> 
     <p class="addmovie">Add movie</p> 
    </li> 
<% end %> 

我有一个名为movies_controller Rails控制器。这有以下定义创建

def create 
    @movie = Movie.new(movie_params) 
    @user = current_user 
    user_id = @user[:id] 
    @movie[:user_id] = user_id 

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

正如你可以看到我有一个<img src="http://image.tmdb.org/t/p/w500/<%= movie.get('poster_path')%>"></img>这是我想在我的Rails模型保存图像。

我该如何从这里出发?我发现以下post和验证码,

uploader = ImageUploader.new 
uploader.download! some_remote_url 
uploader.store! 

但在该职位没有发布,所以我不知道如何实现我的这个项目代码文档。另外我查看了Git页面上的文档,但是我发现很难找到我需要做的事情。从遥远而明亮的网址

+0

该文档实际上是[非常好](https://github.com/carrierwaveuploader/carrierwave) – 2014-10-30 14:17:49

+0

更新了问题以便更好地理解。 – 2014-10-30 14:22:34

+0

你有没有在你的'电影'模型中定义和安装上传器? – 2014-10-30 14:32:38

回答

0

加载图像是非常简单的
在这个railscasts

MODEL.remote_image_url = 'http:...jpg'

<%= form_for @painting, :html => {:multipart => true} do |f| %>  
    <p> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 
    </p> 
    <p> 
    <%= f.file_field :image %> 
    </p> 
    <p> 
    <%= f.label :remote_image_url, "or image URL" %> 
    <%= f.text_field :remote_image_url %> 
    </p> 
    <p><%= f.submit %></p> 
<% end %> 
+0

在这个例子中,用户可以在文本字段中输入图像的url?我正在寻找一种将图像全部置入DOM的方式。 – 2014-10-30 16:25:21

1

看看假设这是通向你想举办

"http://image.tmdb.org/t/p/w500/<%= movie.get('poster_path')%>" 
图像

你应该可以做点像

def create 
    @movie = Movie.new(movie_params) 
    @movie.remote_image_url = "http://image.tmdb.org/t/p/w500/#{@movie.get('poster_path')}" 
    #rest of code 
end 
+0

好的。我想我快到了。我是否需要在模板文件中创建对'remote_image_url'的引用,其中呈现图像url路径?我想是这样。但是,这看起来如何?我想我可以用图像的值和它的标签创建一个不可见的输入域。但我不认为这是做到这一点的方法。 – 2014-10-30 16:57:12